code: def triples_to_graph(self, triples, top=None):
          
          inferred_top = triples[0][0] if triples else None
          ts = []
          for triple in triples:
              if triple[0] == self.TOP_VAR and triple[1] == self.TOP_REL:
                  inferred_top = triple[2]
              else:
                  ts.append(self.handle_triple(*triple))
          top = self.handle_triple(self.TOP_VAR, self.TOP_REL, top).target
          return Graph(ts, top=top or inferred_top)
docs: Create a Graph from *triples* considering codec configuration.
  
          The Graph class does not know about information in the codec,
          so if Graph instantiation depends on special `TYPE_REL` or
          `TOP_VAR` values, use this function instead of instantiating
          a Graph object directly. This is also where edge
          normalization (de-inversion) and value type conversion occur
          (via handle_triple()).
  
          Args:
              triples: an iterable of (lhs, relation, rhs) triples
              top: node identifier of the top node
          Returns:
              a Graph object