code: def _parse_symbol(self, sym):
          
          # Common representations for elements/water in cif files
          # TODO: fix inconsistent handling of water
          special = {"Hw": "H", "Ow": "O", "Wat": "O",
                     "wat": "O", "OH": "", "OH2": "", "NO3": "N"}
  
          parsed_sym = None
          # try with special symbols, otherwise check the first two letters,
          # then the first letter alone. If everything fails try extracting the
          # first letters.
          m_sp = re.match("|".join(special.keys()), sym)
          if m_sp:
              parsed_sym = special[m_sp.group()]
          elif Element.is_valid_symbol(sym[:2].title()):
              parsed_sym = sym[:2].title()
          elif Element.is_valid_symbol(sym[0].upper()):
              parsed_sym = sym[0].upper()
          else:
              m = re.match(r"w?[A-Z][a-z]*", sym)
              if m:
                  parsed_sym = m.group()
  
          if parsed_sym is not None and (m_sp or not re.match(r"{}\d*".format(parsed_sym), sym)):
              msg = "{} parsed as {}".format(sym, parsed_sym)
              warnings.warn(msg)
              self.errors.append(msg)
  
          return parsed_sym
docs: Parse a string with a symbol to extract a string representing an element.
  
          Args:
              sym (str): A symbol to be parsed.
  
          Returns:
              A string with the parsed symbol. None if no parsing was possible.