docs: def unembed_samples(samples, embedding, chain_break_method=None):
      """Return samples over the variables in the source graph.
  
      Args:
          samples (iterable): An iterable of samples where each sample
              is a dict of the form {v: val, ...} where v is a variable
              in the target model and val is the associated value as
              determined by a binary quadratic model sampler.
          embedding (dict): The mapping from the source graph to the target graph.
              Should be of the form {v: {s, ...}, ...} where v is a node in the
              source graph and s is a node in the target graph.
          chain_break_method (function, optional): The method used to resolve chain
              breaks. Default is :method:`majority_vote`.
  
      Returns:
          list: A list of unembedded samples. Each sample is a dict of the form
          {v: val, ...} where v is a variable in the source graph and val
          is the value associated with the variable.
  
      """
      if chain_break_method is None:
          chain_break_method = majority_vote
      return list(itertools.chain(*(chain_break_method(sample, embedding) for sample in samples)))