code: def as_dict(self):
          
          d = {"@module": self.__class__.__module__,
               "@class": self.__class__.__name__, "efermi": self.efermi,
               "structure": self.structure.as_dict(),
               "energies": list(self.energies),
               "densities": {str(spin): list(dens)
                             for spin, dens in self.densities.items()},
               "pdos": []}
          if len(self.pdos) > 0:
              for at in self.structure:
                  dd = {}
                  for orb, pdos in self.pdos[at].items():
                      dd[str(orb)] = {"densities": {str(int(spin)): list(dens)
                                                    for spin,
                                                        dens in pdos.items()}}
                  d["pdos"].append(dd)
              d["atom_dos"] = {str(at): dos.as_dict() for at,
                                                          dos in self.get_element_dos().items()}
              d["spd_dos"] = {str(orb): dos.as_dict() for orb,
                                                          dos in self.get_spd_dos().items()}
          return d
docs: Json-serializable dict representation of CompleteDos.