diff --git a/bilby/bilby_mcmc/sampler.py b/bilby/bilby_mcmc/sampler.py index 6676c76d37ac89ab912a824c18e0d3b175b785c1..c8ccf253f087fdd66f0a3cacf17a4ca92fc38f30 100644 --- a/bilby/bilby_mcmc/sampler.py +++ b/bilby/bilby_mcmc/sampler.py @@ -388,7 +388,9 @@ class Bilby_MCMC(MCMCSampler): If true, resume file was successfully loaded, otherwise false """ - if os.path.isfile(self.resume_file) is False: + if os.path.isfile(self.resume_file) is False or not os.path.getsize( + self.resume_file + ): return False import dill diff --git a/bilby/core/sampler/dynesty.py b/bilby/core/sampler/dynesty.py index 852fb88c192195c7fb08d7bd9654dda9126e7ca5..bb931ed3b8ffc9d619f8f69de800dcf14b805a75 100644 --- a/bilby/core/sampler/dynesty.py +++ b/bilby/core/sampler/dynesty.py @@ -736,7 +736,10 @@ class Dynesty(NestedSampler): if os.path.isfile(self.resume_file): logger.info(f"Reading resume file {self.resume_file}") with open(self.resume_file, "rb") as file: - sampler = dill.load(file) + try: + sampler = dill.load(file) + except EOFError: + sampler = None if not hasattr(sampler, "versions"): logger.warning( diff --git a/bilby/core/sampler/emcee.py b/bilby/core/sampler/emcee.py index db88ee5a2207f85616f081aa3ee31585c5ad2da1..76e4dd1ebec11907cd3c90552ecfe2f188f9961d 100644 --- a/bilby/core/sampler/emcee.py +++ b/bilby/core/sampler/emcee.py @@ -311,7 +311,11 @@ class Emcee(MCMCSampler): """ if hasattr(self, "_sampler"): pass - elif self.resume and os.path.isfile(self.checkpoint_info.sampler_file): + elif ( + self.resume + and os.path.isfile(self.checkpoint_info.sampler_file) + and os.path.getsize(self.checkpoint_info.sampler_file) + ): import dill logger.info( diff --git a/bilby/core/sampler/kombine.py b/bilby/core/sampler/kombine.py index bda7c6d4f06686bf48c142acf726a145da05c760..467751959013a7db6a7e5332bbd7c1044d55c91d 100644 --- a/bilby/core/sampler/kombine.py +++ b/bilby/core/sampler/kombine.py @@ -166,7 +166,11 @@ class Kombine(Emcee): return self.sampler.chain[:nsteps, :, :] def check_resume(self): - return self.resume and os.path.isfile(self.checkpoint_info.sampler_file) + return ( + self.resume + and os.path.isfile(self.checkpoint_info.sampler_file) + and os.path.getsize(self.checkpoint_info.sampler_file) > 0 + ) @signal_wrapper def run_sampler(self): diff --git a/bilby/core/sampler/ptemcee.py b/bilby/core/sampler/ptemcee.py index fd927235d370bbb0800ea805b64f8e9e495c9b78..1d74a6f6adc1871eb2fb68d8ed4dbe1301639493 100644 --- a/bilby/core/sampler/ptemcee.py +++ b/bilby/core/sampler/ptemcee.py @@ -415,7 +415,11 @@ class Ptemcee(MCMCSampler): # This is a very ugly hack to support numpy>=1.24 ptemcee.sampler.np.float = float - if os.path.isfile(self.resume_file) and self.resume is True: + if ( + os.path.isfile(self.resume_file) + and os.path.getsize(self.resume_file) + and self.resume is True + ): import dill logger.info(f"Resume data {self.resume_file} found") @@ -513,7 +517,7 @@ class Ptemcee(MCMCSampler): logger.info("Starting to sample") while True: - for (pos0, log_posterior, log_likelihood) in sampler.sample( + for pos0, log_posterior, log_likelihood in sampler.sample( self.pos0, storechain=False, iterations=self.convergence_inputs.niterations_per_check,