CamDavidsonPilon / Probabilistic-Programming-and-Bayesian-Methods-for-Hackers

aka "Bayesian Methods for Hackers": An introduction to Bayesian methods + probabilistic programming with a computation/understanding-first, mathematics-second point of view. All in pure Python ;)
http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/
MIT License
26.55k stars 7.85k forks source link

Chapter2_pymc2 does not work with the latest numpy #391

Open tushuhei opened 6 years ago

tushuhei commented 6 years ago

When I run the notebook for Chapter 2 on pymc2, it fails with the error below. It looks like current implementation is not compatible with numpy boolean subtract.

python version: 3.6 numpy version: 1.14.5

model = pm.Model([p, true_answers, first_coin_flips,
                  second_coin_flips, observed_proportion, observations])

# To be explained in Chapter 3!
mcmc = pm.MCMC(model)
mcmc.sample(40000, 15000)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-36-aa3a84ff9334> in <module>()
      4 # To be explained in Chapter 3!
      5 mcmc = pm.MCMC(model)
----> 6 mcmc.sample(40000, 15000)

/usr/local/lib/python3.6/dist-packages/pymc/MCMC.py in sample(self, iter, burn, thin, tune_interval, tune_throughout, save_interval, burn_till_tuned, stop_tuning_after, verbose, progress_bar)
    277 
    278         # Run sampler
--> 279         Sampler.sample(self, iter, length, verbose)
    280 
    281     def _loop(self):

/usr/local/lib/python3.6/dist-packages/pymc/Model.py in sample(self, iter, length, verbose)
    249         # Loop
    250         self._current_iter = 0
--> 251         self._loop()
    252         self._finalize()
    253 

/usr/local/lib/python3.6/dist-packages/pymc/MCMC.py in _loop(self)
    313                         print_('Step method %s stepping' % step_method._id)
    314                     # Step the step method
--> 315                     step_method.step()
    316 
    317                 # Record sample to trace, if appropriate

/usr/local/lib/python3.6/dist-packages/pymc/StepMethods.py in step(self)
    908     def step(self):
    909         if ndim(self.stochastic.value):
--> 910             Metropolis.step(self)
    911         else:
    912 

/usr/local/lib/python3.6/dist-packages/pymc/StepMethods.py in step(self)
    499 
    500         # Sample a candidate value
--> 501         self.propose()
    502 
    503         # Probability and likelihood for s's proposed value:

/usr/local/lib/python3.6/dist-packages/pymc/StepMethods.py in propose(self)
    967             switch_locs = where(rand_array < p_jump)
    968             if shape(new_value):
--> 969                 new_value[switch_locs] = True - new_value[switch_locs]
    970             else:
    971                 new_value = True - new_value

TypeError: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead.
BartKeulen commented 6 years ago

I experienced the same issue.

A simple solution to get the code working is to downgrade numpy to version <= 1.13.3

CamDavidsonPilon commented 6 years ago

Yea, I need to update the libs (all of them really) for the chapters

julia-fg commented 5 years ago

No other possible solution?