code: def connectivity_array(self):
          
          # shape = [site, axis]
          cart_coords = np.array(self.s.cart_coords)
          # shape = [site, image, axis]
          all_sites = cart_coords[:, None, :] + self.cart_offsets[None, :, :]
          vt = Voronoi(all_sites.reshape((-1, 3)))
          n_images = all_sites.shape[1]
          cs = (len(self.s), len(self.s), len(self.cart_offsets))
          connectivity = np.zeros(cs)
          vts = np.array(vt.vertices)
          for (ki, kj), v in vt.ridge_dict.items():
              atomi = ki // n_images
              atomj = kj // n_images
  
              imagei = ki % n_images
              imagej = kj % n_images
  
              if imagei != n_images // 2 and imagej != n_images // 2:
                  continue
  
              if imagei == n_images // 2:
                  # atomi is in original cell
                  val = solid_angle(vt.points[ki], vts[v])
                  connectivity[atomi, atomj, imagej] = val
  
              if imagej == n_images // 2:
                  # atomj is in original cell
                  val = solid_angle(vt.points[kj], vts[v])
                  connectivity[atomj, atomi, imagei] = val
  
              if -10.101 in vts[v]:
                  warn('Found connectivity with infinite vertex. '
                       'Cutoff is too low, and results may be '
                       'incorrect')
          return connectivity
docs: Provides connectivity array.
  
          Returns:
              connectivity: An array of shape [atomi, atomj, imagej]. atomi is
              the index of the atom in the input structure. Since the second
              atom can be outside of the unit cell, it must be described
              by both an atom index and an image index. Array data is the
              solid angle of polygon between atomi and imagej of atomj