docs: def _read_charge_and_multiplicity(self):
          """
          Parses charge and multiplicity.
          """
          temp_charge = read_pattern(
              self.text, {
                  "key": r"\$molecule\s+([\-\d]+)\s+\d"
              },
              terminate_on_match=True).get('key')
          if temp_charge != None:
              self.data["charge"] = int(temp_charge[0][0])
          else:
              temp_charge = read_pattern(
                  self.text, {
                      "key": r"Sum of atomic charges \=\s+([\d\-\.\+]+)"
                  },
                  terminate_on_match=True).get('key')
              if temp_charge == None:
                  self.data["charge"] = None
              else:
                  self.data["charge"] = int(float(temp_charge[0][0]))
  
          temp_multiplicity = read_pattern(
              self.text, {
                  "key": r"\$molecule\s+[\-\d]+\s+(\d)"
              },
              terminate_on_match=True).get('key')
          if temp_multiplicity != None:
              self.data["multiplicity"] = int(temp_multiplicity[0][0])
          else:
              temp_multiplicity = read_pattern(
                  self.text, {
                      "key": r"Sum of spin\s+charges \=\s+([\d\-\.\+]+)"
                  },
                  terminate_on_match=True).get('key')
              if temp_multiplicity == None:
                  self.data["multiplicity"] = 1
              else:
                  self.data["multiplicity"] = int(
                      float(temp_multiplicity[0][0])) + 1