def read(filename: str): """ Reads ClusterExpansion object from file. Parameters --------- filename file from which to read """ with tarfile.open(name=filename, mode='r') as tar_file: cs_file = tempfile.NamedTemporaryFile() cs_file.write(tar_file.extractfile('cluster_space').read()) cs_file.seek(0) cs = ClusterSpace.read(cs_file.name) items = pickle.load(tar_file.extractfile('items')) ce = ClusterExpansion.__new__(ClusterExpansion) ce._cluster_space = cs ce._parameters = items['parameters'] # TODO: remove if condition once metadata is firmly established if 'metadata' in items: ce._metadata = items['metadata'] assert list(items['parameters']) == list(ce.parameters) return ce
def read(infile: Union[str, BinaryIO, TextIO]): """ Reads StructureContainer object from file. Parameters ---------- infile file from which to read """ if isinstance(infile, str): filename = infile else: filename = infile.name if not tarfile.is_tarfile(filename): raise TypeError('{} is not a tar file'.format(filename)) temp_db_file = tempfile.NamedTemporaryFile() with tarfile.open(mode='r', name=filename) as tar_file: cs_file = tar_file.extractfile('cluster_space') temp_db_file.write(tar_file.extractfile('database').read()) temp_db_file.seek(0) cluster_space = ClusterSpace.read(cs_file) database = ase.db.connect(temp_db_file.name, type='db') structure_container = StructureContainer(cluster_space) fit_structures = [] for row in database.select(): data = row.data fit_structure = FitStructure(row.toatoms(), user_tag=data['user_tag'], cv=data['cluster_vector'], properties=data['properties']) fit_structures.append(fit_structure) structure_container._structure_list = fit_structures return structure_container