def _load_data(self, atom_syms, coords, bohrs=True):
        import numpy as np
        from .const import atom_num, PHYS
        from .error import XYZError
        if 'geoms' in dir(self):
            raise XYZError(XYZError.OVERWRITE,
                    "Cannot overwrite contents of existing OpanXYZ", "")
        if not len(coords.shape) == 1:
            raise ValueError("Coordinates are not a vector")
        if not len(atom_syms.shape) == 1:
            raise ValueError("Atom symbols are not a simple list")
        if not coords.shape[0] == 3 * atom_syms.shape[0]:
            raise ValueError("len(coords) != 3 * len(atom_syms)")
        if not all( (atom_syms[i].upper() in atom_num)
                                for i in range(atom_syms.shape[0]) ):
            raise ValueError("Invalid atoms specified: {0}".format(
                    [(j, atom_syms[j]) for j in
                        (i for (i, valid) in
                            enumerate(map(lambda k: k in atom_num, atom_syms))
                            if not valid
                        )
                    ] ))
        if not all(map(np.isreal, coords)):
            raise ValueError("All coordinates must be real numeric")
        self.num_atoms = atom_syms.shape[0]
        self.num_geoms = 1
        self.in_str = self.LOAD_DATA_FLAG
        self.descs = np.array([self.LOAD_DATA_FLAG])
        self.XYZ_path = self.LOAD_DATA_FLAG
        self.atom_syms = list(map(str.upper, list(atom_syms)))
        self.geoms = [coords / (1.0 if bohrs else PHYS.ANG_PER_BOHR)]