diff --git a/pymc3/progressbar.py b/pymc3/progressbar.py
deleted file mode 100644
index 68931e30af..0000000000
--- a/pymc3/progressbar.py
+++ /dev/null
@@ -1,140 +0,0 @@
-"""
-A simple progress bar to monitor MCMC sampling progress.
-Modified from original code by Corey Goldberg (2010)
-"""
-
-from __future__ import print_function
-
-import warnings
-warnings.simplefilter(action="ignore", category=FutureWarning)
-import sys
-import time
-import datetime
-import uuid
-try:
- __IPYTHON__
- from IPython.core.display import HTML, Javascript, display
-except (NameError, ImportError):
- pass
-
-__all__ = ['progress_bar']
-
-
-class ProgressBar(object):
-
- def __init__(self, iterations, animation_interval=.5):
- self.iterations = iterations
- self.start = time.time()
- self.last = 0
- self.animation_interval = animation_interval
-
- def percentage(self, i):
- return 100 * i / float(self.iterations)
-
- def update(self, i):
- elapsed = time.time() - self.start
- i += 1
-
- if elapsed - self.last > self.animation_interval:
- self.animate(i, elapsed)
- self.last = elapsed
- elif i == self.iterations and i != 1:
- self.animate(i, elapsed)
-
-
-class TextProgressBar(ProgressBar):
-
- def __init__(self, iterations, printer):
- self.fill_char = '-'
- self.width = 20
- self.printer = printer
-
- super(TextProgressBar, self).__init__(iterations)
- self.update(0)
-
- def animate(self, i, elapsed):
- self.printer(self.progbar(i, elapsed))
-
- def progbar(self, i, elapsed):
- bar = self.bar(self.percentage(i))
- sps = i / float(elapsed)
- eta = (self.iterations / sps) - elapsed
- its = self.iterations
-
- prog_str = "[{bar}] {it} of {its} in {s_elapsed} sec. " \
- "| SPS: {sps} | ETA: {eta}" \
- "".format(bar=bar, it=i, its=its,
- s_elapsed=round(elapsed, 1),
- sps=round(sps, 1), eta=round(eta, 1))
-
- return(prog_str)
-
- def bar(self, percent):
- all_full = self.width - 2
- num_hashes = int(percent / 100 * all_full)
-
- bar = self.fill_char * num_hashes + ' ' * (all_full - num_hashes)
-
- info = '%d%%' % percent
- loc = (len(bar) - len(info)) // 2
- return replace_at(bar, info, loc, loc + len(info))
-
-
-def replace_at(str, new, start, stop):
- return(str[:start] + new + str[stop:])
-
-
-def consoleprint(s):
- if sys.platform.lower().startswith('win'):
- print(s, '\r', end='')
- else:
- print(s)
-
-
-def ipythonprint(s):
- print('\r', s, end='')
- sys.stdout.flush()
-
-
-class IPythonNotebookPB(ProgressBar):
-
- def __init__(self, iterations):
- self.divid = str(uuid.uuid4())
- self.sec_id = str(uuid.uuid4())
-
- pb = HTML(
- """
-
-
- """ % (self.divid, self.sec_id))
- display(pb)
-
- super(IPythonNotebookPB, self).__init__(iterations)
-
- def animate(self, i, elapsed):
- percentage = int(self.fraction(i))
-
- display(Javascript(
- "$('div#%s').width('%i%%')" % (self.divid, percentage)))
- display(Javascript("$('label#%s').text('%i%% in %.1f sec')" %
- (self.sec_id, fraction, round(elapsed, 1))))
-
-
-def run_from_ipython():
- try:
- __IPYTHON__
- return True
- except NameError:
- return False
-
-
-def progress_bar(iters):
- if run_from_ipython():
- if None:
- return NotebookProgressBar(iters)
- else:
- return TextProgressBar(iters, ipythonprint)
- else:
- return TextProgressBar(iters, consoleprint)
diff --git a/pymc3/sampling.py b/pymc3/sampling.py
index caf013ce2d..656de2dc1d 100644
--- a/pymc3/sampling.py
+++ b/pymc3/sampling.py
@@ -1,14 +1,16 @@
+from collections import defaultdict
+
+from joblib import Parallel, delayed
+from numpy.random import randint, seed
+from numpy import shape, asarray
+
from . import backends
from .backends.base import merge_traces, BaseTrace, MultiTrace
from .backends.ndarray import NDArray
-from joblib import Parallel, delayed
from .model import modelcontext, Point
from .step_methods import (NUTS, HamiltonianMC, Metropolis, BinaryMetropolis,
BinaryGibbsMetropolis, Slice, ElemwiseCategorical, CompoundStep)
-from .progressbar import progress_bar
-from numpy.random import randint, seed
-from numpy import shape, asarray
-from collections import defaultdict
+from tqdm import tqdm
import sys
sys.setrecursionlimit(10000)
@@ -159,11 +161,11 @@ def _sample(draws, step=None, start=None, trace=None, chain=0, tune=None,
progressbar=True, model=None, random_seed=-1):
sampling = _iter_sample(draws, step, start, trace, chain,
tune, model, random_seed)
- progress = progress_bar(draws)
+ if progressbar:
+ sampling = tqdm(sampling, total=draws)
try:
- for i, strace in enumerate(sampling):
- if progressbar:
- progress.update(i)
+ for strace in sampling:
+ pass
except KeyboardInterrupt:
strace.close()
return MultiTrace([strace])
diff --git a/requirements.txt b/requirements.txt
index a856b8dcc7..fc6625c5d9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,6 +5,7 @@ theano>=0.8.2
pandas>=0.18.0
patsy>=0.4.0
joblib>=0.9
+tqdm>=4.8.4
CommonMark==0.5.4
recommonmark
sphinx
diff --git a/scripts/create_testenv.sh b/scripts/create_testenv.sh
index 868550245c..736e164c05 100755
--- a/scripts/create_testenv.sh
+++ b/scripts/create_testenv.sh
@@ -13,6 +13,7 @@ if [ ${PYTHON_VERSION} == "2.7" ]; then
conda install --yes mock enum34;
fi
+pip install tqdm
pip install --no-deps numdifftools
pip install git+https://github.com/Theano/Theano.git
pip install git+https://github.com/mahmoudimus/nose-timer.git