code: def get_sites_in_sphere(self, pt, r, include_index=False, include_image=False):
          
          site_fcoords = np.mod(self.frac_coords, 1)
          neighbors = []
          for fcoord, dist, i, img in self._lattice.get_points_in_sphere(
                  site_fcoords, pt, r):
              nnsite = PeriodicSite(self[i].species,
                                    fcoord, self._lattice,
                                    properties=self[i].properties)
  
              # Get the neighbor data
              nn_data = (nnsite, dist) if not include_index else (nnsite, dist, i)
              if include_image:
                  nn_data += (img,)
              neighbors.append(nn_data)
          return neighbors
docs: Find all sites within a sphere from the point. This includes sites
          in other periodic images.
  
          Algorithm:
  
          1. place sphere of radius r in crystal and determine minimum supercell
             (parallelpiped) which would contain a sphere of radius r. for this
             we need the projection of a_1 on a unit vector perpendicular
             to a_2 & a_3 (i.e. the unit vector in the direction b_1) to
             determine how many a_1"s it will take to contain the sphere.
  
             Nxmax = r * length_of_b_1 / (2 Pi)
  
          2. keep points falling within r.
  
          Args:
              pt (3x1 array): cartesian coordinates of center of sphere.
              r (float): Radius of sphere.
              include_index (bool): Whether the non-supercell site index
                  is included in the returned data
              include_image (bool): Whether to include the supercell image
                  is included in the returned data
  
          Returns:
              [(site, dist) ...] since most of the time, subsequent processing
              requires the distance.