Incompatible with numpy 2.0.0rc1
MuellerSeb opened this issue · 3 comments
Numpy 2 is around the corner with having its first release candidate: https://pypi.org/project/numpy/2.0.0rc1
emcee
at least uses VisibleDeprecationWarning
from numpy that will be removed with numpy 2: https://numpy.org/devdocs/release/2.0.0-notes.html
Warnings and exceptions present in numpy.exceptions (e.g, ComplexWarning, VisibleDeprecationWarning) are no longer exposed in the main namespace.
So with the release of numpy 2, emcee will run into some troubles.
Was introduced here: #361
But even doing from numpy.exceptions import VisibleDeprecationWarning
and replacing np.VisibleDeprecationWarning
with VisibleDeprecationWarning
in ensemble.py
, I run into the following error:
File ~/AtWork/Cloud/GIT/GitHub/GeoStat/GSTools/src/gstools/random/rng.py:92, in RNG.sample_ln_pdf(self, ln_pdf, size, sample_around, nwalkers, burn_in, oversampling_factor)
90 initial_state = State(init_guess, copy=True)
91 initial_state.random_state = self.random.get_state()
---> 92 burn_in_state = sampler.run_mcmc(
93 initial_state=initial_state, nsteps=burn_in
94 )
95 # reset after burn_in
96 sampler.reset()
File ~/mambaforge/envs/gstools_np2/lib/python3.12/site-packages/emcee/ensemble.py:444, in EnsembleSampler.run_mcmc(self, initial_state, nsteps, **kwargs)
441 initial_state = self._previous_state
443 results = None
--> 444 for results in self.sample(initial_state, iterations=nsteps, **kwargs):
445 pass
447 # Store so that the ``initial_state=None`` case will work
File ~/mambaforge/envs/gstools_np2/lib/python3.12/site-packages/emcee/ensemble.py:411, in EnsembleSampler.sample(self, initial_state, log_prob0, rstate0, blobs0, iterations, tune, skip_initial_state_check, thin_by, thin, store, progress, progress_kwargs)
409 # Save the new step
410 if store and (i + 1) % checkpoint_step == 0:
--> 411 self.backend.save_step(state, accepted)
413 pbar.update(1)
414 i += 1
File ~/mambaforge/envs/gstools_np2/lib/python3.12/site-packages/emcee/backends/backend.py:228, in Backend.save_step(self, state, accepted)
226 self.log_prob[self.iteration, :] = state.log_prob
227 if state.blobs is not None:
--> 228 self.blobs[self.iteration, :] = state.blobs
229 self.accepted += accepted
230 self.random_state = state.random_state
ValueError: could not broadcast input array from shape (50,0) into shape (50,)
So there is more to it...
Thanks for bringing this up! I've been meaning to look into this, but I'm not 100% sure how much capacity I'll have. If you or anyone else wants to start looking into this and opening up a PR that would be very much appreciated!!