From b38f760ecf49b6e9b8f1a21b3f468edd5b0f7891 Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Thu, 29 Jan 2026 18:15:38 +0100 Subject: [PATCH 1/7] Fix scalar conversion error with NumPy 2.x --- pydream/Dream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index 81e34ec..120e2ae 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -465,7 +465,7 @@ def estimate_crossover_probabilities(self, ndim, q0, q_new, CR): cross_probs = Dream_shared_vars.cross_probs[0:self.nCR] #Compute squared normalized jumping distance - m_loc = int(np.where(self.CR_values == CR)[0]) + m_loc = np.where(self.CR_values == CR)[0].item() Dream_shared_vars.ncr_updates[m_loc] += 1 From d6842823d5ccd630b3e808103d7c7d750d70b1bf Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 00:55:54 +0100 Subject: [PATCH 2/7] flatnonzero is cleaner with explicit int --- pydream/Dream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index 120e2ae..9f01158 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -465,7 +465,7 @@ def estimate_crossover_probabilities(self, ndim, q0, q_new, CR): cross_probs = Dream_shared_vars.cross_probs[0:self.nCR] #Compute squared normalized jumping distance - m_loc = np.where(self.CR_values == CR)[0].item() + m_loc = int(np.flatnonzero(self.CR_values == CR)[0]) Dream_shared_vars.ncr_updates[m_loc] += 1 From af3c85c2a3cabfdcc454bfa2ab31962619731f3d Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 01:01:38 +0100 Subject: [PATCH 3/7] fixed also gamma_loc, same issue --- pydream/Dream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index 9f01158..a2bcb18 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -520,7 +520,7 @@ def estimate_gamma_level_probs(self, ndim, q0, q_new, gamma_level): gamma_level_probs = Dream_shared_vars.gamma_level_probs[0:self.ngamma] - gamma_loc = int(np.where(self.gamma_level_values == gamma_level)[0]) + gamma_loc = int(np.flatnonzero(self.gamma_level_values == gamma_level).item()) Dream_shared_vars.ngamma_updates[gamma_loc] += 1 From 131aab9a5348db392ba23aea839b560c5f464a25 Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 01:30:55 +0100 Subject: [PATCH 4/7] last robustness issues related to where returning tuple are fixed --- pydream/Dream.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index a2bcb18..0832fd7 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -542,8 +542,9 @@ def estimate_gamma_level_probs(self, ndim, q0, q_new, gamma_level): def set_snooker(self): """Choose to run a snooker update on a given iteration or not.""" if self.snooker != 0: - snooker_choice = np.where(np.random.multinomial(1, [self.snooker, 1-self.snooker])==1) - + snooker_choice = int( + np.random.multinomial(1, [self.snooker, 1-self.snooker]).argmax()) + if snooker_choice[0] == 0: run_snooker = True else: @@ -612,12 +613,13 @@ def set_gamma(self, DEpairs, snooker_choice, gamma_level_choice, d_prime): d_prime : int number of parameter dimensions to be updated on this step.""" - gamma_unity_choice = np.where(np.random.multinomial(1, [self.p_gamma_unity, 1-self.p_gamma_unity])==1) + gamma_unity_choice = int( + np.random.multinomial(1, [self.p_gamma_unity, 1-self.p_gamma_unity]).argmax()) if snooker_choice: gamma = np.random.uniform(1.2, 2.2) - elif gamma_unity_choice[0] == 0: + elif gamma_unity_choice == 0: gamma = 1.0 else: @@ -905,7 +907,7 @@ def mt_choose_proposal_pt(self, log_priors, log_likes, proposed_pts, T): #Calculate probabilities sum_proposal_logps = np.sum(log_ps_sub) logp_prob = log_ps_sub/sum_proposal_logps - best_logp_loc = int(np.squeeze(np.where(np.random.multinomial(1, logp_prob)==1)[0])) + best_logp_loc = int(np.random.multinomial(1, logp_prob).argmax()) #Randomly select one of the tested points with probability proportional to the probability density at the point q_proposal = np.squeeze(proposed_pts[best_logp_loc]) From e600d7a7842d71f2545491f684382f2046debec2 Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 13:06:33 +0100 Subject: [PATCH 5/7] fixed scalra snooker choice --- pydream/Dream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index 0832fd7..5e61d75 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -545,7 +545,7 @@ def set_snooker(self): snooker_choice = int( np.random.multinomial(1, [self.snooker, 1-self.snooker]).argmax()) - if snooker_choice[0] == 0: + if snooker_choice == 0: run_snooker = True else: run_snooker = False From 06f85a1e32ad48be44c839630fbe0a60845a220e Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 13:15:43 +0100 Subject: [PATCH 6/7] using item for m_loc too for consistency --- pydream/Dream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydream/Dream.py b/pydream/Dream.py index 5e61d75..3af7162 100644 --- a/pydream/Dream.py +++ b/pydream/Dream.py @@ -465,7 +465,7 @@ def estimate_crossover_probabilities(self, ndim, q0, q_new, CR): cross_probs = Dream_shared_vars.cross_probs[0:self.nCR] #Compute squared normalized jumping distance - m_loc = int(np.flatnonzero(self.CR_values == CR)[0]) + m_loc = int(np.flatnonzero(self.CR_values == CR).item()) Dream_shared_vars.ncr_updates[m_loc] += 1 From 00b68bb0c0e7c738942342d4d5dda112d0436bd2 Mon Sep 17 00:00:00 2001 From: Benjamin Zoller Date: Sat, 31 Jan 2026 15:52:51 +0100 Subject: [PATCH 7/7] fixed some brittle compararison --- pydream/core.py | 12 ++++++------ pydream/parameters.py | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pydream/core.py b/pydream/core.py index baf8a37..e0f84c1 100644 --- a/pydream/core.py +++ b/pydream/core.py @@ -44,12 +44,12 @@ def run_dream(parameters, likelihood, nchains=5, niterations=50000, start=None, """ if restart: - if start == None: + if start is None: raise Exception('Restart run specified but no start positions given.') if 'model_name' not in kwargs: raise Exception('Restart run specified but no model name to load history and crossover value files from given.') - if type(parameters) is not list: + if not isinstance(parameters, list): parameters = [parameters] model = Model(likelihood=likelihood, sampled_parameters=parameters) @@ -71,7 +71,7 @@ def run_dream(parameters, likelihood, nchains=5, niterations=50000, start=None, else: - if type(start) is list: + if isinstance(start, list): args = zip([step_instance]*nchains, [niterations]*nchains, start, [verbose]*nchains, [nverbose]*nchains) else: @@ -137,7 +137,7 @@ def _sample_dream_pt(nchains, niterations, step_instance, start, pool, verbose): step_instances = [step_instance]*nchains - if type(start) is list: + if isinstance(start, list): args = list(zip(step_instances, start, T, [None]*nchains, [None]*nchains)) else: args = list(zip(step_instances, [start]*nchains, T, [None]*nchains, [None]*nchains)) @@ -296,10 +296,10 @@ def _setup_mp_dream_pool(nchains, niterations, step_instance, start_pt=None, mp_ n = ctx.Value('i', 0) tf = ctx.Value('c', b'F') - if step_instance.crossover_burnin == None: + if step_instance.crossover_burnin is None: step_instance.crossover_burnin = int(np.floor(niterations/10)) - if start_pt != None: + if start_pt is not None: if step_instance.start_random: print('Warning: start position provided but random_start set to True. Overrode random_start value and starting walk at provided start position.') step_instance.start_random = False diff --git a/pydream/parameters.py b/pydream/parameters.py index c75b934..a317761 100644 --- a/pydream/parameters.py +++ b/pydream/parameters.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- import numpy as np -import time -class SampledParam(): +class SampledParam: """A SciPy-based parameter prior class. Parameters