code: def get_string(self, sort_keys=False, pretty=False):
          
          keys = self.keys()
          if sort_keys:
              keys = sorted(keys)
          lines = []
          for k in keys:
              if k == "MAGMOM" and isinstance(self[k], list):
                  value = []
  
                  if (isinstance(self[k][0], list) or isinstance(self[k][0], Magmom)) and \
                          (self.get("LSORBIT") or self.get("LNONCOLLINEAR")):
                      value.append(" ".join(str(i) for j in self[k] for i in j))
                  elif self.get("LSORBIT") or self.get("LNONCOLLINEAR"):
                      for m, g in itertools.groupby(self[k]):
                          value.append("3*{}*{}".format(len(tuple(g)), m))
                  else:
                      # float() to ensure backwards compatibility between
                      # float magmoms and Magmom objects
                      for m, g in itertools.groupby(self[k], lambda x: float(x)):
                          value.append("{}*{}".format(len(tuple(g)), m))
  
                  lines.append([k, " ".join(value)])
              elif isinstance(self[k], list):
                  lines.append([k, " ".join([str(i) for i in self[k]])])
              else:
                  lines.append([k, self[k]])
  
          if pretty:
              return str(tabulate([[l[0], "=", l[1]] for l in lines],
                                  tablefmt="plain"))
          else:
              return str_delimited(lines, None, " = ") + "\n"
docs: Returns a string representation of the INCAR.  The reason why this
          method is different from the __str__ method is to provide options for
          pretty printing.
  
          Args:
              sort_keys (bool): Set to True to sort the INCAR parameters
                  alphabetically. Defaults to False.
              pretty (bool): Set to True for pretty aligned output. Defaults
                  to False.