code: def automatic_density(structure, kppa, force_gamma=False):
          
          comment = "pymatgen v%s with grid density = %.0f / atom" % (
              __version__, kppa)
          if math.fabs((math.floor(kppa ** (1 / 3) + 0.5)) ** 3 - kppa) < 1:
              kppa += kppa * 0.01
          latt = structure.lattice
          lengths = latt.abc
          ngrid = kppa / structure.num_sites
          mult = (ngrid * lengths[0] * lengths[1] * lengths[2]) ** (1 / 3)
  
          num_div = [int(math.floor(max(mult / l, 1))) for l in lengths]
  
          is_hexagonal = latt.is_hexagonal()
  
          has_odd = any([i % 2 == 1 for i in num_div])
          if has_odd or is_hexagonal or force_gamma:
              style = Kpoints.supported_modes.Gamma
          else:
              style = Kpoints.supported_modes.Monkhorst
  
          return Kpoints(comment, 0, style, [num_div], [0, 0, 0])
docs: Returns an automatic Kpoint object based on a structure and a kpoint
          density. Uses Gamma centered meshes for hexagonal cells and
          Monkhorst-Pack grids otherwise.
  
          Algorithm:
              Uses a simple approach scaling the number of divisions along each
              reciprocal lattice vector proportional to its length.
  
          Args:
              structure (Structure): Input structure
              kppa (int): Grid density
              force_gamma (bool): Force a gamma centered mesh (default is to
                  use gamma only for hexagonal cells or odd meshes)
  
          Returns:
              Kpoints