pymc icon indicating copy to clipboard operation
pymc copied to clipboard

NameError: name 'HTML' is not defined

Open fbarfi opened this issue 2 years ago • 15 comments

Description of your problem

Running the example: SMC-ABC_Lotka-Volterra_example. exactly as is. Getting the error down below. Thanks!

with pm.Model() as example:
    a = pm.Normal("a", mu=0, sigma=5)
    b = pm.HalfNormal("b", sigma=1)
    s = pm.Simulator("s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=data)

    idata = pm.sample_smc()
    idata.extend(pm.sample_posterior_predictive(idata))

Please provide the full traceback.

Complete error traceback
RemoteTraceback                           Traceback (most recent call last)
RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/multiprocessing/pool.py", line 51, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/pymc/smc/sample_smc.py", line 439, in _apply_args_and_kwargs
    return fn(*args, **kwargs)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/pymc/smc/sample_smc.py", line 361, in _sample_smc_int
    progressbar.update_bar(getattr(progressbar, "offset", 0) + 0)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/fastprogress/fastprogress.py", line 76, in update_bar
    else: self.on_update(val, f'{100 * val/self.total:.2f}% [{val}/{self.total} {elapsed_t}<{remaining_t}{end}]')
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/fastprogress/fastprogress.py", line 127, in on_update
    if self.display: self.out.update(HTML(self.progress))
NameError: name 'HTML' is not defined
"""

The above exception was the direct cause of the following exception:

NameError                                 Traceback (most recent call last)
Input In [5], in <cell line: 1>()
      3 b = pm.HalfNormal("b", sigma=1)
      4 s = pm.Simulator("s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=data)
----> 6 idata = pm.sample_smc()
      7 idata.extend(pm.sample_posterior_predictive(idata))

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/pymc/smc/sample_smc.py:227, in sample_smc(draws, kernel, start, model, random_seed, chains, cores, compute_convergence_checks, return_inferencedata, idata_kwargs, progressbar, **kernel_kwargs)
    224 t1 = time.time()
    226 if cores > 1:
--> 227     results = run_chains_parallel(
    228         chains, progressbar, _sample_smc_int, params, random_seed, kernel_kwargs, cores
    229     )
    230 else:
    231     results = run_chains_sequential(
    232         chains, progressbar, _sample_smc_int, params, random_seed, kernel_kwargs
    233     )

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/pymc/smc/sample_smc.py:408, in run_chains_parallel(chains, progressbar, to_run, params, random_seed, kernel_kwargs, cores)
    406 params = tuple(cloudpickle.dumps(p) for p in params)
    407 kernel_kwargs = {key: cloudpickle.dumps(value) for key, value in kernel_kwargs.items()}
--> 408 results = _starmap_with_kwargs(
    409     pool,
    410     to_run,
    411     [(*params, random_seed[chain], chain, pbars[chain]) for chain in range(chains)],
    412     repeat(kernel_kwargs),
    413 )
    414 results = tuple(cloudpickle.loads(r) for r in results)
    415 pool.close()

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/site-packages/pymc/smc/sample_smc.py:435, in _starmap_with_kwargs(pool, fn, args_iter, kwargs_iter)
    431 def _starmap_with_kwargs(pool, fn, args_iter, kwargs_iter):
    432     # Helper function to allow kwargs with Pool.starmap
    433     # Copied from https://stackoverflow.com/a/53173433/13311693
    434     args_for_starmap = zip(repeat(fn), args_iter, kwargs_iter)
--> 435     return pool.starmap(_apply_args_and_kwargs, args_for_starmap)

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/multiprocessing/pool.py:372, in Pool.starmap(self, func, iterable, chunksize)
    366 def starmap(self, func, iterable, chunksize=None):
    367     '''
    368     Like `map()` method but the elements of the `iterable` are expected to
    369     be iterables as well and will be unpacked as arguments. Hence
    370     `func` and (a, b) becomes func(a, b).
    371     '''
--> 372     return self._map_async(func, iterable, starmapstar, chunksize).get()

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_4/lib/python3.10/multiprocessing/pool.py:771, in ApplyResult.get(self, timeout)
    769     return self._value
    770 else:
--> 771     raise self._value

NameError: name 'HTML' is not defined

Please provide any additional information below.

Versions and main components

Python implementation: CPython Python version : 3.10.4 IPython version : 8.4.0

Compiler : Clang 12.0.1 OS : Darwin Release : 21.5.0 Machine : arm64 Processor : arm CPU cores : 10 Architecture: 64bit

arviz : 0.12.1 matplotlib: 3.5.2 numpy : 1.22.4 pymc : 4.0.0b6

fbarfi avatar Jun 05 '22 00:06 fbarfi

I am not able to reproduce this error locally. Maybe this is related to https://github.com/fastai/fastprogress/issues/32

aloctavodia avatar Jun 05 '22 12:06 aloctavodia

Thanks aloctavodia for the suggestion. I followed the link and checked the suggestion in it about reinstalling ipywidgets which I did. It does not solve the problem. I am running the latest ipywidgets 7.7.0. I tried to run the notebook on collar but then was faced with other issues (after I installed pymc there).

fbarfi avatar Jun 05 '22 13:06 fbarfi

Thanks for checking. I will check this tomorrow, in the meantime could you try installing the latest version (pymc 4.0). https://github.com/pymc-devs/pymc/wiki/Installation-Guide-(MacOS)

aloctavodia avatar Jun 05 '22 13:06 aloctavodia

Thanks. I have already installed pymc : 4.0.0b6. Isn't that the latest?

fbarfi avatar Jun 05 '22 13:06 fbarfi

almost, we have recently released the first stable version of the 4.x series. If you install from main or following the intructions in the link i posterd you will get the version 4.0.

aloctavodia avatar Jun 05 '22 13:06 aloctavodia

will do. thanks.

fbarfi avatar Jun 05 '22 13:06 fbarfi

Just reinstalled everything afresh as directed. Yet getting the same error. thanks.

fbarfi avatar Jun 05 '22 14:06 fbarfi

Error about HTML disappears when I do:


pm.sample_smc(progressbar=False)

Now I get the following error:


---------------------------------------------------------------------------
RemoteTraceback                           Traceback (most recent call last)
RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/multiprocessing/pool.py", line 51, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/sample_smc.py", line 439, in _apply_args_and_kwargs
    return fn(*args, **kwargs)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/sample_smc.py", line 363, in _sample_smc_int
    smc._initialize_kernel()
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/smc.py", line 225, in _initialize_kernel
    initial_point, [self.model.datalogpt], self.variables, shared
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/model.py", line 847, in datalogpt
    return self.observedlogpt + self.potentiallogpt
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/model.py", line 864, in observedlogpt
    return self.logpt(vars=self.observed_RVs)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/model.py", line 745, in logpt
    rv_logps = joint_logpt(list(rv_values.keys()), rv_values, sum=False, jacobian=jacobian)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/distributions/logprob.py", line 226, in joint_logpt
    temp_logp_var_dict = factorized_joint_logprob(
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/aeppl/joint_logprob.py", line 147, in factorized_joint_logprob
    q_logprob_vars = _logprob(
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/functools.py", line 889, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/aeppl/logprob.py", line 85, in _logprob
    raise NotImplementedError(f"Logprob method not implemented for {op}")
NotImplementedError: Logprob method not implemented for Simulator_rv{0, (0, 0), floatX, False}
"""

The above exception was the direct cause of the following exception:

NotImplementedError                       Traceback (most recent call last)
Input In [6], in <cell line: 1>()
      3 b = pm.HalfNormal("b", sigma=1)
      4 s = pm.Simulator("s", normal_sim, params=(a, b), 
      5                  sum_stat="sort", epsilon=1, observed=data)
----> 7 idata = pm.sample_smc(progressbar=False)
      8 idata.extend(pm.sample_posterior_predictive(idata))

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/sample_smc.py:227, in sample_smc(draws, kernel, start, model, random_seed, chains, cores, compute_convergence_checks, return_inferencedata, idata_kwargs, progressbar, **kernel_kwargs)
    224 t1 = time.time()
    226 if cores > 1:
--> 227     results = run_chains_parallel(
    228         chains, progressbar, _sample_smc_int, params, random_seed, kernel_kwargs, cores
    229     )
    230 else:
    231     results = run_chains_sequential(
    232         chains, progressbar, _sample_smc_int, params, random_seed, kernel_kwargs
    233     )

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/sample_smc.py:408, in run_chains_parallel(chains, progressbar, to_run, params, random_seed, kernel_kwargs, cores)
    406 params = tuple(cloudpickle.dumps(p) for p in params)
    407 kernel_kwargs = {key: cloudpickle.dumps(value) for key, value in kernel_kwargs.items()}
--> 408 results = _starmap_with_kwargs(
    409     pool,
    410     to_run,
    411     [(*params, random_seed[chain], chain, pbars[chain]) for chain in range(chains)],
    412     repeat(kernel_kwargs),
    413 )
    414 results = tuple(cloudpickle.loads(r) for r in results)
    415 pool.close()

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/site-packages/pymc/smc/sample_smc.py:435, in _starmap_with_kwargs(pool, fn, args_iter, kwargs_iter)
    431 def _starmap_with_kwargs(pool, fn, args_iter, kwargs_iter):
    432     # Helper function to allow kwargs with Pool.starmap
    433     # Copied from https://stackoverflow.com/a/53173433/13311693
    434     args_for_starmap = zip(repeat(fn), args_iter, kwargs_iter)
--> 435     return pool.starmap(_apply_args_and_kwargs, args_for_starmap)

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/multiprocessing/pool.py:372, in Pool.starmap(self, func, iterable, chunksize)
    366 def starmap(self, func, iterable, chunksize=None):
    367     '''
    368     Like `map()` method but the elements of the `iterable` are expected to
    369     be iterables as well and will be unpacked as arguments. Hence
    370     `func` and (a, b) becomes func(a, b).
    371     '''
--> 372     return self._map_async(func, iterable, starmapstar, chunksize).get()

File /opt/homebrew/Caskroom/miniforge/base/envs/pymc_env/lib/python3.10/multiprocessing/pool.py:771, in ApplyResult.get(self, timeout)
    769     return self._value
    770 else:
--> 771     raise self._value

NotImplementedError: Logprob method not implemented for Simulator_rv{0, (0, 0), floatX, False}



fbarfi avatar Jun 05 '22 20:06 fbarfi

Can you try running with a single core? pm.sample_smc(cores=1) or something.

Also, please provide the whole snippet you are using so that we can try to reproduce it locally.

ricardoV94 avatar Jun 06 '22 14:06 ricardoV94

this is the example I was running from the examples posted on pymc

[SMC-ABC_Lotka-Volterra_example.ipynb](https://github.com/pymc-devs/pymc-examples/blob/main/examples/samplers/SMC-ABC_Lotka-Volterra_example.ipynb)

I did what you suggested with cores=1 and everything works perfectly. Does this mean that one cannot use more than one core? Thanks.

fbarfi avatar Jun 06 '22 15:06 fbarfi

It should work, but there seems to be an issue with multiprocessing on your end :/

ricardoV94 avatar Jun 06 '22 16:06 ricardoV94

I am not sure what to say. The moment used cores =2 I get the message at the end as

NotImplementedError: Logprob method not implemented for Simulator_rv{0, (0, 0), floatX, False}

it does not mention anywhere the multiprocessing. Could it be a macOS issue, or perhaps an apple M1 issue? thanks.

fbarfi avatar Jun 06 '22 16:06 fbarfi

I am looking into the other examples for samplers that use the pm.sample_smc and they all work with cores=1 and multiple chains (4). thanks.

fbarfi avatar Jun 06 '22 16:06 fbarfi

The traceback above indicates Python 3.10. Are we sure that Aesara/PyMC work with 3.10?

Because #5209

michaelosthege avatar Jun 08 '22 16:06 michaelosthege

Yes they do work. I ve tried many codes, including even with sampling_jax.

fbarfi avatar Jun 08 '22 16:06 fbarfi

I have installed PyMC v5 on a new environment and received the same error when running the Bayes Factor notebook.

I updated the code to: ...progressbar=False) and the error was solved.

reshamas avatar Jan 04 '23 14:01 reshamas

I have tried running the notebook to reproduce the error but in my case it worked, so it isn't yet clear how to reproduce this issue :/

OriolAbril avatar Jan 15 '23 20:01 OriolAbril

I also get this error running the SMC-ABC example from the docs:

import numpy as np
import pymc as pm
import matplotlib.pyplot as plt
import arviz as az

data = np.random.normal(loc=0, scale=1, size=1000)

def normal_sim(rng, a, b, size=1000):
    return rng.normal(a, b, size=size)

with pm.Model() as example:
    a = pm.Normal("a", mu=0, sigma=5)
    b = pm.HalfNormal("b", sigma=1)
    s = pm.Simulator("s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=data)

    idata = pm.sample_smc()
    idata.extend(pm.sample_posterior_predictive(idata))

The error goes away (no other errors) when I add the progressbar=False argument to sample_smc.

I'm using version 5.0.2 in an Anaconda environment on Mac OS X with Python 3.11.

Here is the package list:

billtubbs avatar Apr 05 '23 18:04 billtubbs