code: def kpoints(self):
          
          settings = self.user_kpoints_settings or self._config_dict["KPOINTS"]
  
          if isinstance(settings, Kpoints):
              return settings
  
          # If grid_density is in the kpoints_settings use
          # Kpoints.automatic_density
          if settings.get('grid_density'):
              return Kpoints.automatic_density(
                  self.structure, int(settings['grid_density']),
                  self.force_gamma)
  
          # If reciprocal_density is in the kpoints_settings use
          # Kpoints.automatic_density_by_vol
          elif settings.get('reciprocal_density'):
              return Kpoints.automatic_density_by_vol(
                  self.structure, int(settings['reciprocal_density']),
                  self.force_gamma)
  
          # If length is in the kpoints_settings use Kpoints.automatic
          elif settings.get('length'):
              return Kpoints.automatic(settings['length'])
  
          # Raise error. Unsure of which kpoint generation to use
          else:
              raise ValueError(
                  "Invalid KPoint Generation algo : Supported Keys are "
                  "grid_density: for Kpoints.automatic_density generation, "
                  "reciprocal_density: for KPoints.automatic_density_by_vol "
                  "generation, and length  : for Kpoints.automatic generation")
docs: Writes out a KPOINTS file using the fully automated grid method. Uses
          Gamma centered meshes for hexagonal cells and Monk grids otherwise.
  
          Algorithm:
              Uses a simple approach scaling the number of divisions along each
              reciprocal lattice vector proportional to its length.