docs: def create_edges(self):
          """Set up edge-node and edge-cell relations.
          """
          # Reshape into individual edges.
          # Sort the columns to make it possible for `unique()` to identify
          # individual edges.
          s = self.idx_hierarchy.shape
          a = numpy.sort(self.idx_hierarchy.reshape(s[0], -1).T)
          a_unique, inv, cts = unique_rows(a)
  
          assert numpy.all(
              cts < 3
          ), "No edge has more than 2 cells. Are cells listed twice?"
  
          self.is_boundary_edge = (cts[inv] == 1).reshape(s[1:])
  
          self.is_boundary_edge_individual = cts == 1
  
          self.edges = {"nodes": a_unique}
  
          # cell->edges relationship
          self.cells["edges"] = inv.reshape(3, -1).T
  
          self._edges_cells = None
          self._edge_gid_to_edge_list = None
  
          # Store an index {boundary,interior}_edge -> edge_gid
          self._edge_to_edge_gid = [
              [],
              numpy.where(self.is_boundary_edge_individual)[0],
              numpy.where(~self.is_boundary_edge_individual)[0],
          ]
          return