docs: def _read_species_and_inital_geometry(self):
          """
          Parses species and initial geometry.
          """
          header_pattern = r"Standard Nuclear Orientation \(Angstroms\)\s+I\s+Atom\s+X\s+Y\s+Z\s+-+"
          table_pattern = r"\s*\d+\s+([a-zA-Z]+)\s*([\d\-\.]+)\s*([\d\-\.]+)\s*([\d\-\.]+)\s*"
          footer_pattern = r"\s*-+"
          temp_geom = read_table_pattern(self.text, header_pattern,
                                         table_pattern, footer_pattern)
          if temp_geom == None or len(temp_geom) == 0:
              self.data["species"] = None
              self.data["initial_geometry"] = None
              self.data["initial_molecule"] = None
              self.data["point_group"] = None
          else:
              temp_point_group = read_pattern(
              self.text, {
                  "key":
                  r"Molecular Point Group\s+([A-Za-z\d\*]+)"
              },
              terminate_on_match=True).get('key')
              if temp_point_group != None:
                  self.data["point_group"] = temp_point_group[0][0]
              else:
                  self.data["point_group"] = None
              temp_geom = temp_geom[0]
              species = []
              geometry = np.zeros(shape=(len(temp_geom), 3), dtype=float)
              for ii, entry in enumerate(temp_geom):
                  species += [entry[0]]
                  for jj in range(3):
                      geometry[ii, jj] = float(entry[jj + 1])
              self.data["species"] = species
              self.data["initial_geometry"] = geometry
              self.data["initial_molecule"] = Molecule(
                  species=species,
                  coords=geometry,
                  charge=self.data.get('charge'),
                  spin_multiplicity=self.data.get('multiplicity'))