From 644e790e63a74ade7dbead4925952fbb19467fb5 Mon Sep 17 00:00:00 2001 From: Eshel Dror Date: Sat, 7 Mar 2026 20:08:39 -0800 Subject: [PATCH 1/3] Alter test_mcmc to show issues with periodic saving --- tests/test_mcmc.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/test_mcmc.py b/tests/test_mcmc.py index cea41417..1d13355b 100644 --- a/tests/test_mcmc.py +++ b/tests/test_mcmc.py @@ -44,21 +44,21 @@ def test_mcmc_runs(num_temps=0, num_threads=1): } ) - # run it a little (tests 0 burn-in steps) + # run it some (tests adding to results object, and periodic saving) + output_filename = os.path.join(orbitize.DATADIR, 'test_mcmc.hdf5') + myDriver.sampler.run_sampler( + 400, burn_steps=10, output_filename=output_filename, periodic_save_freq=2 + ) + + # run it a little more (tests 0 burn-in steps) myDriver.sampler.run_sampler(100) - assert myDriver.sampler.results.post.shape[0] == 100 + assert myDriver.sampler.results.post.shape[0] == 500 # run it a little more myDriver.sampler.run_sampler(1000, burn_steps=1) - assert myDriver.sampler.results.post.shape[0] == 1100 - - # run it a little more (tests adding to results object, and periodic saving) - output_filename = os.path.join(orbitize.DATADIR, 'test_mcmc.hdf5') - myDriver.sampler.run_sampler( - 400, burn_steps=1, output_filename=output_filename, periodic_save_freq=2 - ) + assert myDriver.sampler.results.post.shape[0] == 1500 - # test results object exists and has 2100*100 steps + # test results object exists and has 1500*100 steps assert os.path.exists(output_filename) saved_results = results.Results() saved_results.load_results(output_filename) From 68a06cd26ffb8b9d7bd2bf739953e04375f49e54 Mon Sep 17 00:00:00 2001 From: Eshel Dror Date: Sat, 7 Mar 2026 20:20:44 -0800 Subject: [PATCH 2/3] Fix periodic_save_freq for mcmc when saving during burn-in --- orbitize/results.py | 3 ++- tests/test_mcmc.py | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/orbitize/results.py b/orbitize/results.py index cecacaff..0776c317 100644 --- a/orbitize/results.py +++ b/orbitize/results.py @@ -115,7 +115,8 @@ def save_results(self, filename): hf.attrs['version_number'] = self.version_number # Now add post and lnlike from the results object as datasets - hf.create_dataset('post', data=self.post) + if self.post is not None: + hf.create_dataset('post', data=self.post) # hf.create_dataset('data', data=self.data) if self.lnlike is not None: hf.create_dataset('lnlike', data=self.lnlike) diff --git a/tests/test_mcmc.py b/tests/test_mcmc.py index 1d13355b..777c80ec 100644 --- a/tests/test_mcmc.py +++ b/tests/test_mcmc.py @@ -50,12 +50,14 @@ def test_mcmc_runs(num_temps=0, num_threads=1): 400, burn_steps=10, output_filename=output_filename, periodic_save_freq=2 ) + # TODO: Add test for restarting from saved results when burn-in is interrupted (i.e. no regular steps have been done) + # run it a little more (tests 0 burn-in steps) myDriver.sampler.run_sampler(100) assert myDriver.sampler.results.post.shape[0] == 500 - # run it a little more - myDriver.sampler.run_sampler(1000, burn_steps=1) + # run it a little more and save + myDriver.sampler.run_sampler(1000, burn_steps=1, output_filename=output_filename, periodic_save_freq=2) assert myDriver.sampler.results.post.shape[0] == 1500 # test results object exists and has 1500*100 steps From 56efa6823a1818e4989fef395d636f5697aa3d44 Mon Sep 17 00:00:00 2001 From: Eshel Dror Date: Sat, 7 Mar 2026 21:10:03 -0800 Subject: [PATCH 3/3] Fix initializing mcmc from previous results that contain only burn-in --- orbitize/results.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/orbitize/results.py b/orbitize/results.py index 0776c317..731df8ef 100644 --- a/orbitize/results.py +++ b/orbitize/results.py @@ -152,8 +152,12 @@ def load_results(self, filename, append=False): version_number = str(hf.attrs['version_number']) except KeyError: version_number = "<= 1.13" - post = np.array(hf.get('post')) - lnlike = np.array(hf.get('lnlike')) + post = hf.get('post') + if post is not None: + post = np.array(post) + lnlike = hf.get('lnlike') + if lnlike is not None: + lnlike = np.array(lnlike) try: