code: def face_adjacency(self):
          
          adjacency, edges = graph.face_adjacency(mesh=self,
                                                  return_edges=True)
          self._cache['face_adjacency_edges'] = edges
          return adjacency
docs: Find faces that share an edge, which we call here 'adjacent'.
  
          Returns
          ----------
          adjacency : (n,2) int
            Pairs of faces which share an edge
  
          Examples
          ---------
  
          In [1]: mesh = trimesh.load('models/featuretype.STL')
  
          In [2]: mesh.face_adjacency
          Out[2]:
          array([[   0,    1],
                 [   2,    3],
                 [   0,    3],
                 ...,
                 [1112,  949],
                 [3467, 3475],
                 [1113, 3475]])
  
          In [3]: mesh.faces[mesh.face_adjacency[0]]
          Out[3]:
          TrackedArray([[   1,    0,  408],
                        [1239,    0,    1]], dtype=int64)
  
          In [4]: import networkx as nx
  
          In [5]: graph = nx.from_edgelist(mesh.face_adjacency)
  
          In [6]: groups = nx.connected_components(graph)