diff --git a/pymc3/sampling.py b/pymc3/sampling.py index 0b7eac9e23..2e4963e867 100644 --- a/pymc3/sampling.py +++ b/pymc3/sampling.py @@ -318,7 +318,7 @@ def _soft_update(a, b): a.update({k: v for k, v in b.items() if k not in a}) -def sample_ppc(trace, samples=None, model=None, vars=None, size=None, random_seed=None): +def sample_ppc(trace, samples=None, model=None, vars=None, size=None, random_seed=None, progressbar=True): """Generate posterior predictive samples from a model given a trace. Parameters @@ -353,8 +353,13 @@ def sample_ppc(trace, samples=None, model=None, vars=None, size=None, random_see seed(random_seed) + if progressbar: + indices = tqdm(randint(0, len(trace), samples), total=samples) + else: + indices = randint(0, len(trace), samples) + ppc = defaultdict(list) - for idx in randint(0, len(trace), samples): + for idx in indices: param = trace[idx] for var in vars: ppc[var.name].append(var.distribution.random(point=param, diff --git a/pymc3/variational/advi.py b/pymc3/variational/advi.py index 2edd409acb..2e3795754f 100644 --- a/pymc3/variational/advi.py +++ b/pymc3/variational/advi.py @@ -12,6 +12,8 @@ import pymc3 as pm from pymc3.backends.base import MultiTrace +from tqdm import trange + __all__ = ['advi', 'sample_vp'] ADVIFit = namedtuple('ADVIFit', 'means, stds, elbo_vals') @@ -272,7 +274,7 @@ def optimizer(loss, param): def sample_vp( vparams, draws=1000, model=None, local_RVs=None, random_seed=None, - hide_transformed=True): + hide_transformed=True, progressbar=True): """Draw samples from variational posterior. Parameters @@ -344,7 +346,9 @@ def sample_vp( trace = pm.sampling.NDArray(model=model, vars=vars_sampled) trace.setup(draws=draws, chain=0) - for i in range(draws): + range_ = trange(draws) if progressbar else range(draws) + + for i in range_: # 'point' is like {'var1': np.array(0.1), 'var2': np.array(0.2), ...} point = {varname: value for varname, value in zip(varnames, f())} trace.record(point)