code: def read_abinit_hdr(self):
          
          d = {}
          for hvar in _HDR_VARIABLES.values():
              ncname = hvar.etsf_name if hvar.etsf_name is not None else hvar.name
              if ncname in self.rootgrp.variables:
                  d[hvar.name] = self.read_value(ncname)
              elif ncname in self.rootgrp.dimensions:
                  d[hvar.name] = self.read_dimvalue(ncname)
              else:
                  raise ValueError("Cannot find `%s` in `%s`" % (ncname, self.path))
              # Convert scalars to (well) scalars.
              if hasattr(d[hvar.name], "shape") and not d[hvar.name].shape:
                  d[hvar.name] = np.asscalar(d[hvar.name])
              if hvar.name in ("title", "md5_pseudos", "codvsn"):
                  # Convert array of numpy bytes to list of strings
                  if hvar.name == "codvsn":
                      d[hvar.name] = "".join(bs.decode("utf-8").strip() for bs in d[hvar.name])
                  else:
                      d[hvar.name] = ["".join(bs.decode("utf-8") for bs in astr).strip()
                              for astr in d[hvar.name]]
  
          return AbinitHeader(d)
docs: Read the variables associated to the Abinit header.
  
          Return :class:`AbinitHeader`