From a2f2a878e953c64dff6e7d95b52a0ba65886894d Mon Sep 17 00:00:00 2001
From: Matthew Pitkin <matthew.pitkin@ligo.org>
Date: Wed, 10 Jul 2024 17:23:43 +0000
Subject: [PATCH] Catch error if trying to load zero bytes resume file

---
 bilby/bilby_mcmc/sampler.py   | 4 +++-
 bilby/core/sampler/dynesty.py | 5 ++++-
 bilby/core/sampler/emcee.py   | 6 +++++-
 bilby/core/sampler/kombine.py | 6 +++++-
 bilby/core/sampler/ptemcee.py | 8 ++++++--
 5 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/bilby/bilby_mcmc/sampler.py b/bilby/bilby_mcmc/sampler.py
index 6676c76d3..c8ccf253f 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 852fb88c1..bb931ed3b 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 db88ee5a2..76e4dd1eb 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 bda7c6d4f..467751959 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 fd927235d..1d74a6f6a 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,
-- 
GitLab