code: def from_string(contents):
          
          if contents[-1] != "\n":
              contents += "\n"
          white_space = r"[ \t\r\f\v]"
          natoms_line = white_space + r"*\d+" + white_space + r"*\n"
          comment_line = r"[^\n]*\n"
          coord_lines = r"(\s*\w+\s+[0-9\-\+\.eEdD]+\s+[0-9\-\+\.eEdD]+\s+[0-9\-\+\.eEdD]+\s*\n)+"
          frame_pattern_text = natoms_line + comment_line + coord_lines
          pat = re.compile(frame_pattern_text, re.MULTILINE)
          mols = []
          for xyz_match in pat.finditer(contents):
              xyz_text = xyz_match.group(0)
              mols.append(XYZ._from_frame_string(xyz_text))
          return XYZ(mols)
docs: Creates XYZ object from a string.
  
          Args:
              contents: String representing an XYZ file.
  
          Returns:
              XYZ object