Hello community,

here is the log from the commit of package python-tqdm for openSUSE:Factory 
checked in at 2018-08-08 14:54:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tqdm (Old)
 and      /work/SRC/openSUSE:Factory/.python-tqdm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-tqdm"

Wed Aug  8 14:54:06 2018 rev:11 rq:627954 version:4.24.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tqdm/python-tqdm.changes  2018-07-14 
20:27:45.908578167 +0200
+++ /work/SRC/openSUSE:Factory/.python-tqdm.new/python-tqdm.changes     
2018-08-08 14:54:50.281682604 +0200
@@ -1,0 +2,11 @@
+Tue Aug  7 14:44:44 UTC 2018 - toddrme2...@gmail.com
+
+- update to 4.24.0
+  * autonotebook submodule for automatic selection of notebook/CLI bar (#443, 
#508)
+    > update/add pandas() example documentation (#474)
+  * NameError:IntProgress changed to a more helpful ImportError (#187, #451, 
#558)
+  * support bool() cast when disable=True (#574)
+  * fix format_sizeof hundreds rounding (#579 -> #581)
+  * ensure URLs in documentation are secure (https)
+
+-------------------------------------------------------------------

Old:
----
  tqdm-4.23.4.tar.gz

New:
----
  tqdm-4.24.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-tqdm.spec ++++++
--- /var/tmp/diff_new_pack.mNWHw1/_old  2018-08-08 14:54:52.001685446 +0200
+++ /var/tmp/diff_new_pack.mNWHw1/_new  2018-08-08 14:54:52.001685446 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define         oldpython python
 Name:           python-tqdm
-Version:        4.23.4
+Version:        4.24.0
 Release:        0
 Summary:        An extensible progress meter
 License:        MPL-2.0 AND MIT
@@ -31,14 +31,17 @@
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires(post): update-alternatives
-Requires(postun): update-alternatives
-BuildArch:      noarch
 # SECTION test requirements
+BuildRequires:  %{python_module jupyter_ipython}
+BuildRequires:  %{python_module jupyter_ipywidgets}
 BuildRequires:  %{python_module nose}
 BuildRequires:  %{python_module numpy}
 BuildRequires:  %{python_module pandas}
 # /SECTION
+Requires(post): update-alternatives
+Requires(postun): update-alternatives
+BuildArch:      noarch
+
 %python_subpackages
 
 %description
@@ -68,9 +71,10 @@
 %python_uninstall_alternative tqdm
 
 %check
-%{python_expand export PATH="$PATH:%{buildroot}%{_bindir}"
-nosetests-%{$python_bin_suffix} --ignore-files="tests_perf\.py" 
--ignore-files="tests_synchronisation\.py" tqdm/
-}
+# tests currently broken, see https://github.com/tqdm/tqdm/pull/586
+# %%{python_expand export PATH="$PATH:%{buildroot}%{_bindir}"
+# nosetests-%%{$python_bin_suffix} --ignore-files="tests_perf\.py" 
--ignore-files="tests_synchronisation\.py" tqdm/
+# }
 
 %files %{python_files}
 %doc README.rst logo.png

++++++ tqdm-4.23.4.tar.gz -> tqdm-4.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/CONTRIBUTING.md 
new/tqdm-4.24.0/CONTRIBUTING.md
--- old/tqdm-4.23.4/CONTRIBUTING.md     2018-05-14 01:34:20.000000000 +0200
+++ new/tqdm-4.24.0/CONTRIBUTING.md     2018-07-26 15:07:34.000000000 +0200
@@ -88,7 +88,7 @@
 
 - regularly bump the version number in the file
 
[_version.py](https://raw.githubusercontent.com/tqdm/tqdm/master/tqdm/_version.py)
-- follow the [Semantic Versioning](http://semver.org/) convention
+- follow the [Semantic Versioning](https://semver.org/) convention
 - take care of this (instead of users) to avoid PR conflicts
 solely due to the version file bumping
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/PKG-INFO new/tqdm-4.24.0/PKG-INFO
--- old/tqdm-4.23.4/PKG-INFO    2018-05-22 21:06:50.000000000 +0200
+++ new/tqdm-4.24.0/PKG-INFO    2018-07-26 18:27:01.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: tqdm
-Version: 4.23.4
+Version: 4.24.0
 Summary: Fast, Extensible Progress Meter
 Home-page: https://github.com/tqdm/tqdm
 Author: Noam Yorav-Raphael
@@ -675,6 +675,18 @@
         |Screenshot-Jupyter2|
         |Screenshot-Jupyter3|
         
+        It is also possible to let ``tqdm`` automatically choose between
+        console or notebook versions by using the ``autonotebook`` submodule:
+        
+        .. code:: python
+        
+            from tqdm.autonotebook import tqdm
+            tqdm.pandas()
+        
+        Note that this will issue a ``TqdmExperimentalWarning`` if run in a 
notebook
+        since it is not meant to be possible to distinguish between ``jupyter 
notebook``
+        and ``jupyter console``.
+        
         Writing messages
         ~~~~~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/README.rst new/tqdm-4.24.0/README.rst
--- old/tqdm-4.23.4/README.rst  2018-05-14 01:34:20.000000000 +0200
+++ new/tqdm-4.24.0/README.rst  2018-07-26 15:07:34.000000000 +0200
@@ -665,6 +665,18 @@
 |Screenshot-Jupyter2|
 |Screenshot-Jupyter3|
 
+It is also possible to let ``tqdm`` automatically choose between
+console or notebook versions by using the ``autonotebook`` submodule:
+
+.. code:: python
+
+    from tqdm.autonotebook import tqdm
+    tqdm.pandas()
+
+Note that this will issue a ``TqdmExperimentalWarning`` if run in a notebook
+since it is not meant to be possible to distinguish between ``jupyter 
notebook``
+and ``jupyter console``.
+
 Writing messages
 ~~~~~~~~~~~~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/examples/progressbar/__init__.py 
new/tqdm-4.24.0/examples/progressbar/__init__.py
--- old/tqdm-4.23.4/examples/progressbar/__init__.py    2015-12-28 
23:16:15.000000000 +0100
+++ new/tqdm-4.24.0/examples/progressbar/__init__.py    1970-01-01 
01:00:00.000000000 +0100
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# progressbar  - Text progress bar library for Python.
-# Copyright (c) 2005 Nilton Volpato
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-"""Text progress bar library for Python.
-
-A text progress bar is typically used to display the progress of a long
-running operation, providing a visual cue that processing is underway.
-
-The ProgressBar class manages the current progress, and the format of the line
-is given by a number of widgets. A widget is an object that may display
-differently depending on the state of the progress bar. There are three types
-of widgets:
- - a string, which always shows itself
-
- - a ProgressBarWidget, which may return a different value every time its
-   update method is called
-
- - a ProgressBarWidgetHFill, which is like ProgressBarWidget, except it
-   expands to fill the remaining width of the line.
-
-The progressbar module is very easy to use, yet very powerful. It will also
-automatically enable features like auto-resizing when the system supports it.
-"""
-
-__author__ = 'Nilton Volpato'
-__author_email__ = 'first-name dot last-name @ gmail.com'
-__date__ = '2011-05-14'
-__version__ = '2.3'
-
-from compat import *
-from widgets import *
-from progressbar import *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/examples/progressbar/compat.py 
new/tqdm-4.24.0/examples/progressbar/compat.py
--- old/tqdm-4.23.4/examples/progressbar/compat.py      2015-12-28 
23:16:15.000000000 +0100
+++ new/tqdm-4.24.0/examples/progressbar/compat.py      1970-01-01 
01:00:00.000000000 +0100
@@ -1,45 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# progressbar  - Text progress bar library for Python.
-# Copyright (c) 2005 Nilton Volpato
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-"""Compatibility methods and classes for the progressbar module."""
-
-
-# Python 3.x (and backports) use a modified iterator syntax
-# This will allow 2.x to behave with 3.x iterators
-try:
-  next
-except NameError:
-    def next(iter):
-        try:
-            # Try new style iterators
-            return iter.__next__()
-        except AttributeError:
-            # Fallback in case of a "native" iterator
-            return iter.next()
-
-
-# Python < 2.5 does not have "any"
-try:
-  any
-except NameError:
-   def any(iterator):
-      for item in iterator:
-         if item: return True
-      return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/examples/progressbar/progressbar.py 
new/tqdm-4.24.0/examples/progressbar/progressbar.py
--- old/tqdm-4.23.4/examples/progressbar/progressbar.py 2015-12-28 
23:16:15.000000000 +0100
+++ new/tqdm-4.24.0/examples/progressbar/progressbar.py 1970-01-01 
01:00:00.000000000 +0100
@@ -1,306 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# progressbar  - Text progress bar library for Python.
-# Copyright (c) 2005 Nilton Volpato
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-"""Main ProgressBar class."""
-
-from __future__ import division
-
-import math
-import os
-import signal
-import sys
-import time
-
-try:
-    from fcntl import ioctl
-    from array import array
-    import termios
-except ImportError:
-    pass
-
-from compat import *  # for: any, next
-import widgets
-
-
-class UnknownLength: pass
-
-
-class ProgressBar(object):
-    """The ProgressBar class which updates and prints the bar.
-
-    A common way of using it is like:
-    >>> pbar = ProgressBar().start()
-    >>> for i in range(100):
-    ...    # do something
-    ...    pbar.update(i+1)
-    ...
-    >>> pbar.finish()
-
-    You can also use a ProgressBar as an iterator:
-    >>> progress = ProgressBar()
-    >>> for i in progress(some_iterable):
-    ...    # do something
-    ...
-
-    Since the progress bar is incredibly customizable you can specify
-    different widgets of any type in any order. You can even write your own
-    widgets! However, since there are already a good number of widgets you
-    should probably play around with them before moving on to create your own
-    widgets.
-
-    The term_width parameter represents the current terminal width. If the
-    parameter is set to an integer then the progress bar will use that,
-    otherwise it will attempt to determine the terminal width falling back to
-    80 columns if the width cannot be determined.
-
-    When implementing a widget's update method you are passed a reference to
-    the current progress bar. As a result, you have access to the
-    ProgressBar's methods and attributes. Although there is nothing preventing
-    you from changing the ProgressBar you should treat it as read only.
-
-    Useful methods and attributes include (Public API):
-     - currval: current progress (0 <= currval <= maxval)
-     - maxval: maximum (and final) value
-     - finished: True if the bar has finished (reached 100%)
-     - start_time: the time when start() method of ProgressBar was called
-     - seconds_elapsed: seconds elapsed since start_time and last call to
-                        update
-     - percentage(): progress in percent [0..100]
-    """
-
-    __slots__ = ('currval', 'fd', 'finished', 'last_update_time',
-                 'left_justify', 'maxval', 'next_update', 'num_intervals',
-                 'poll', 'seconds_elapsed', 'signal_set', 'start_time',
-                 'term_width', 'update_interval', 'widgets', '_time_sensitive',
-                 '__iterable')
-
-    _DEFAULT_MAXVAL = 100
-    _DEFAULT_TERMSIZE = 80
-    _DEFAULT_WIDGETS = [widgets.Percentage(), ' ', widgets.Bar()]
-
-    def __init__(self, maxval=None, widgets=None, term_width=None, poll=1,
-                 left_justify=True, fd=sys.stderr):
-        """Initializes a progress bar with sane defaults."""
-
-        # Don't share a reference with any other progress bars
-        if widgets is None:
-            widgets = list(self._DEFAULT_WIDGETS)
-
-        self.maxval = maxval
-        self.widgets = widgets
-        self.fd = fd
-        self.left_justify = left_justify
-
-        self.signal_set = False
-        if term_width is not None:
-            self.term_width = term_width
-        else:
-            try:
-                self._handle_resize()
-                signal.signal(signal.SIGWINCH, self._handle_resize)
-                self.signal_set = True
-            except (SystemExit, KeyboardInterrupt): raise
-            except:
-                self.term_width = self._env_size()
-
-        self.__iterable = None
-        self._update_widgets()
-        self.currval = 0
-        self.finished = False
-        self.last_update_time = None
-        self.poll = poll
-        self.seconds_elapsed = 0
-        self.start_time = None
-        self.update_interval = 1
-        self.next_update = 0
-
-
-    def __call__(self, iterable):
-        """Use a ProgressBar to iterate through an iterable."""
-
-        try:
-            self.maxval = len(iterable)
-        except:
-            if self.maxval is None:
-                self.maxval = UnknownLength
-
-        self.__iterable = iter(iterable)
-        return self
-
-
-    def __iter__(self):
-        return self
-
-
-    def __next__(self):
-        try:
-            value = next(self.__iterable)
-            if self.start_time is None:
-                self.start()
-            else:
-                self.update(self.currval + 1)
-            return value
-        except StopIteration:
-            if self.start_time is None:
-                self.start()
-            self.finish()
-            raise
-
-
-    # Create an alias so that Python 2.x won't complain about not being
-    # an iterator.
-    next = __next__
-
-
-    def _env_size(self):
-        """Tries to find the term_width from the environment."""
-
-        return int(os.environ.get('COLUMNS', self._DEFAULT_TERMSIZE)) - 1
-
-
-    def _handle_resize(self, signum=None, frame=None):
-        """Tries to catch resize signals sent from the terminal."""
-
-        h, w = array('h', ioctl(self.fd, termios.TIOCGWINSZ, '\0' * 8))[:2]
-        self.term_width = w
-
-
-    def percentage(self):
-        """Returns the progress as a percentage."""
-        if self.currval >= self.maxval:
-            return 100.0
-        return self.currval * 100.0 / self.maxval
-
-    percent = property(percentage)
-
-
-    def _format_widgets(self):
-        result = []
-        expanding = []
-        width = self.term_width
-
-        for index, widget in enumerate(self.widgets):
-            if isinstance(widget, widgets.WidgetHFill):
-                result.append(widget)
-                expanding.insert(0, index)
-            else:
-                widget = widgets.format_updatable(widget, self)
-                result.append(widget)
-                width -= len(widget)
-
-        count = len(expanding)
-        while count:
-            portion = max(int(math.ceil(width * 1. / count)), 0)
-            index = expanding.pop()
-            count -= 1
-
-            widget = result[index].update(self, portion)
-            width -= len(widget)
-            result[index] = widget
-
-        return result
-
-
-    def _format_line(self):
-        """Joins the widgets and justifies the line."""
-
-        widgets = ''.join(self._format_widgets())
-
-        if self.left_justify: return widgets.ljust(self.term_width)
-        else: return widgets.rjust(self.term_width)
-
-
-    def _need_update(self):
-        """Returns whether the ProgressBar should redraw the line."""
-        if self.currval >= self.next_update or self.finished: return True
-
-        delta = time.time() - self.last_update_time
-        return self._time_sensitive and delta > self.poll
-
-
-    def _update_widgets(self):
-        """Checks all widgets for the time sensitive bit."""
-
-        self._time_sensitive = any(getattr(w, 'TIME_SENSITIVE', False)
-                                    for w in self.widgets)
-
-
-    def update(self, value=None):
-        """Updates the ProgressBar to a new value."""
-
-        if value is not None and value is not UnknownLength:
-            if (self.maxval is not UnknownLength
-                and not 0 <= value <= self.maxval):
-
-                raise ValueError('Value out of range')
-
-            self.currval = value
-
-
-        if not self._need_update(): return
-        if self.start_time is None:
-            raise RuntimeError('You must call "start" before calling "update"')
-
-        now = time.time()
-        self.seconds_elapsed = now - self.start_time
-        self.next_update = self.currval + self.update_interval
-        self.fd.write(self._format_line() + '\r')
-        self.last_update_time = now
-
-
-    def start(self):
-        """Starts measuring time, and prints the bar at 0%.
-
-        It returns self so you can use it like this:
-        >>> pbar = ProgressBar().start()
-        >>> for i in range(100):
-        ...    # do something
-        ...    pbar.update(i+1)
-        ...
-        >>> pbar.finish()
-        """
-
-        if self.maxval is None:
-            self.maxval = self._DEFAULT_MAXVAL
-
-        self.num_intervals = max(100, self.term_width)
-        self.next_update = 0
-
-        if self.maxval is not UnknownLength:
-            if self.maxval < 0: raise ValueError('Value out of range')
-            self.update_interval = self.maxval / self.num_intervals
-
-
-        self.start_time = self.last_update_time = time.time()
-        self.update(0)
-
-        return self
-
-
-    def finish(self):
-        """Puts the ProgressBar bar in the finished state."""
-
-        if self.finished:
-            return
-        self.finished = True
-        self.update(self.maxval)
-        self.fd.write('\n')
-        if self.signal_set:
-            signal.signal(signal.SIGWINCH, signal.SIG_DFL)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/examples/progressbar/widgets.py 
new/tqdm-4.24.0/examples/progressbar/widgets.py
--- old/tqdm-4.23.4/examples/progressbar/widgets.py     2015-12-28 
23:16:15.000000000 +0100
+++ new/tqdm-4.24.0/examples/progressbar/widgets.py     1970-01-01 
01:00:00.000000000 +0100
@@ -1,356 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# progressbar  - Text progress bar library for Python.
-# Copyright (c) 2005 Nilton Volpato
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-"""Default ProgressBar widgets."""
-
-from __future__ import division
-
-import datetime
-import math
-
-try:
-    from abc import ABCMeta, abstractmethod
-except ImportError:
-    AbstractWidget = object
-    abstractmethod = lambda fn: fn
-else:
-    AbstractWidget = ABCMeta('AbstractWidget', (object,), {})
-
-
-def format_updatable(updatable, pbar):
-    if hasattr(updatable, 'update'): return updatable.update(pbar)
-    else: return updatable
-
-
-class Widget(AbstractWidget):
-    """The base class for all widgets.
-
-    The ProgressBar will call the widget's update value when the widget should
-    be updated. The widget's size may change between calls, but the widget may
-    display incorrectly if the size changes drastically and repeatedly.
-
-    The boolean TIME_SENSITIVE informs the ProgressBar that it should be
-    updated more often because it is time sensitive.
-    """
-
-    TIME_SENSITIVE = False
-    __slots__ = ()
-
-    @abstractmethod
-    def update(self, pbar):
-        """Updates the widget.
-
-        pbar - a reference to the calling ProgressBar
-        """
-
-
-class WidgetHFill(Widget):
-    """The base class for all variable width widgets.
-
-    This widget is much like the \\hfill command in TeX, it will expand to
-    fill the line. You can use more than one in the same line, and they will
-    all have the same width, and together will fill the line.
-    """
-
-    @abstractmethod
-    def update(self, pbar, width):
-        """Updates the widget providing the total width the widget must fill.
-
-        pbar - a reference to the calling ProgressBar
-        width - The total width the widget must fill
-        """
-
-
-class Timer(Widget):
-    """Widget which displays the elapsed seconds."""
-
-    __slots__ = ('format_string',)
-    TIME_SENSITIVE = True
-
-    def __init__(self, format='Elapsed Time: %s'):
-        self.format_string = format
-
-    @staticmethod
-    def format_time(seconds):
-        """Formats time as the string "HH:MM:SS"."""
-
-        return str(datetime.timedelta(seconds=int(seconds)))
-
-
-    def update(self, pbar):
-        """Updates the widget to show the elapsed time."""
-
-        return self.format_string % self.format_time(pbar.seconds_elapsed)
-
-
-class ETA(Timer):
-    """Widget which attempts to estimate the time of arrival."""
-
-    TIME_SENSITIVE = True
-
-    def update(self, pbar):
-        """Updates the widget to show the ETA or total time when finished."""
-
-        if pbar.currval == 0:
-            return 'ETA:  --:--:--'
-        elif pbar.finished:
-            return 'Time: %s' % self.format_time(pbar.seconds_elapsed)
-        else:
-            elapsed = pbar.seconds_elapsed
-            eta = elapsed * pbar.maxval / pbar.currval - elapsed
-            return 'ETA:  %s' % self.format_time(eta)
-
-
-class AdaptiveETA(Timer):
-    """Widget which attempts to estimate the time of arrival.
-
-    Uses a weighted average of two estimates:
-      1) ETA based on the total progress and time elapsed so far
-      2) ETA based on the progress as per tha last 10 update reports
-
-    The weight depends on the current progress so that to begin with the
-    total progress is used and at the end only the most recent progress is
-    used.
-    """
-
-    TIME_SENSITIVE = True
-    NUM_SAMPLES = 10
-
-    def _update_samples(self, currval, elapsed):
-        sample = (currval, elapsed)
-        if not hasattr(self, 'samples'):
-            self.samples = [sample] * (self.NUM_SAMPLES + 1)
-        else:
-            self.samples.append(sample)
-        return self.samples.pop(0)
-
-    def _eta(self, maxval, currval, elapsed):
-        return elapsed * maxval / float(currval) - elapsed
-
-    def update(self, pbar):
-        """Updates the widget to show the ETA or total time when finished."""
-        if pbar.currval == 0:
-            return 'ETA:  --:--:--'
-        elif pbar.finished:
-            return 'Time: %s' % self.format_time(pbar.seconds_elapsed)
-        else:
-            elapsed = pbar.seconds_elapsed
-            currval1, elapsed1 = self._update_samples(pbar.currval, elapsed)
-            eta = self._eta(pbar.maxval, pbar.currval, elapsed)
-            if pbar.currval > currval1:
-                etasamp = self._eta(pbar.maxval - currval1,
-                                    pbar.currval - currval1,
-                                    elapsed - elapsed1)
-                weight = (pbar.currval / float(pbar.maxval)) ** 0.5
-                eta = (1 - weight) * eta + weight * etasamp
-            return 'ETA:  %s' % self.format_time(eta)
-
-
-class FileTransferSpeed(Widget):
-    """Widget for showing the transfer speed (useful for file transfers)."""
-
-    FORMAT = '%6.2f %s%s/s'
-    PREFIXES = ' kMGTPEZY'
-    __slots__ = ('unit',)
-
-    def __init__(self, unit='B'):
-        self.unit = unit
-
-    def update(self, pbar):
-        """Updates the widget with the current SI prefixed speed."""
-
-        if pbar.seconds_elapsed < 2e-6 or pbar.currval < 2e-6: # =~ 0
-            scaled = power = 0
-        else:
-            speed = pbar.currval / pbar.seconds_elapsed
-            power = int(math.log(speed, 1000))
-            scaled = speed / 1000.**power
-
-        return self.FORMAT % (scaled, self.PREFIXES[power], self.unit)
-
-
-class AnimatedMarker(Widget):
-    """An animated marker for the progress bar which defaults to appear as if
-    it were rotating.
-    """
-
-    __slots__ = ('markers', 'curmark')
-
-    def __init__(self, markers='|/-\\'):
-        self.markers = markers
-        self.curmark = -1
-
-    def update(self, pbar):
-        """Updates the widget to show the next marker or the first marker when
-        finished"""
-
-        if pbar.finished: return self.markers[0]
-
-        self.curmark = (self.curmark + 1) % len(self.markers)
-        return self.markers[self.curmark]
-
-# Alias for backwards compatibility
-RotatingMarker = AnimatedMarker
-
-
-class Counter(Widget):
-    """Displays the current count."""
-
-    __slots__ = ('format_string',)
-
-    def __init__(self, format='%d'):
-        self.format_string = format
-
-    def update(self, pbar):
-        return self.format_string % pbar.currval
-
-
-class Percentage(Widget):
-    """Displays the current percentage as a number with a percent sign."""
-
-    def update(self, pbar):
-        return '%3d%%' % pbar.percentage()
-
-
-class FormatLabel(Timer):
-    """Displays a formatted label."""
-
-    mapping = {
-        'elapsed': ('seconds_elapsed', Timer.format_time),
-        'finished': ('finished', None),
-        'last_update': ('last_update_time', None),
-        'max': ('maxval', None),
-        'seconds': ('seconds_elapsed', None),
-        'start': ('start_time', None),
-        'value': ('currval', None)
-    }
-
-    __slots__ = ('format_string',)
-    def __init__(self, format):
-        self.format_string = format
-
-    def update(self, pbar):
-        context = {}
-        for name, (key, transform) in self.mapping.items():
-            try:
-                value = getattr(pbar, key)
-
-                if transform is None:
-                   context[name] = value
-                else:
-                   context[name] = transform(value)
-            except: pass
-
-        return self.format_string % context
-
-
-class SimpleProgress(Widget):
-    """Returns progress as a count of the total (e.g.: "5 of 47")."""
-
-    __slots__ = ('sep',)
-
-    def __init__(self, sep=' of '):
-        self.sep = sep
-
-    def update(self, pbar):
-        return '%d%s%d' % (pbar.currval, self.sep, pbar.maxval)
-
-
-class Bar(WidgetHFill):
-    """A progress bar which stretches to fill the line."""
-
-    __slots__ = ('marker', 'left', 'right', 'fill', 'fill_left')
-
-    def __init__(self, marker='#', left='|', right='|', fill=' ',
-                 fill_left=True):
-        """Creates a customizable progress bar.
-
-        marker - string or updatable object to use as a marker
-        left - string or updatable object to use as a left border
-        right - string or updatable object to use as a right border
-        fill - character to use for the empty part of the progress bar
-        fill_left - whether to fill from the left or the right
-        """
-        self.marker = marker
-        self.left = left
-        self.right = right
-        self.fill = fill
-        self.fill_left = fill_left
-
-
-    def update(self, pbar, width):
-        """Updates the progress bar and its subcomponents."""
-
-        left, marked, right = (format_updatable(i, pbar) for i in
-                               (self.left, self.marker, self.right))
-
-        width -= len(left) + len(right)
-        # Marked must *always* have length of 1
-        if pbar.maxval:
-          marked *= int(pbar.currval / pbar.maxval * width)
-        else:
-          marked = ''
-
-        if self.fill_left:
-            return '%s%s%s' % (left, marked.ljust(width, self.fill), right)
-        else:
-            return '%s%s%s' % (left, marked.rjust(width, self.fill), right)
-
-
-class ReverseBar(Bar):
-    """A bar which has a marker which bounces from side to side."""
-
-    def __init__(self, marker='#', left='|', right='|', fill=' ',
-                 fill_left=False):
-        """Creates a customizable progress bar.
-
-        marker - string or updatable object to use as a marker
-        left - string or updatable object to use as a left border
-        right - string or updatable object to use as a right border
-        fill - character to use for the empty part of the progress bar
-        fill_left - whether to fill from the left or the right
-        """
-        self.marker = marker
-        self.left = left
-        self.right = right
-        self.fill = fill
-        self.fill_left = fill_left
-
-
-class BouncingBar(Bar):
-    def update(self, pbar, width):
-        """Updates the progress bar and its subcomponents."""
-
-        left, marker, right = (format_updatable(i, pbar) for i in
-                               (self.left, self.marker, self.right))
-
-        width -= len(left) + len(right)
-
-        if pbar.finished: return '%s%s%s' % (left, width * marker, right)
-
-        position = int(pbar.currval % (width * 2 - 1))
-        if position > width: position = width * 2 - position
-        lpad = self.fill * (position - 1)
-        rpad = self.fill * (width - len(marker) - len(lpad))
-
-        # Swap if we want to bounce the other way
-        if not self.fill_left: rpad, lpad = lpad, rpad
-
-        return '%s%s%s%s%s' % (left, lpad, marker, rpad, right)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tox.ini new/tqdm-4.24.0/tox.ini
--- old/tqdm-4.23.4/tox.ini     2018-05-14 01:34:20.000000000 +0200
+++ new/tqdm-4.24.0/tox.ini     2018-07-26 15:07:34.000000000 +0200
@@ -1,4 +1,4 @@
-# Tox (http://tox.testrun.org/) is a tool for running tests
+# Tox (https://tox.testrun.org/) is a tool for running tests
 # in multiple virtualenvs. This configuration file will run the
 # test suite on all supported python versions. To use it, "pip install tox"
 # and then run "tox" from this directory.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm/_tqdm.py 
new/tqdm-4.24.0/tqdm/_tqdm.py
--- old/tqdm-4.23.4/tqdm/_tqdm.py       2018-05-22 21:02:36.000000000 +0200
+++ new/tqdm-4.24.0/tqdm/_tqdm.py       2018-07-26 15:07:34.000000000 +0200
@@ -141,7 +141,7 @@
             Number with Order of Magnitude SI unit postfix.
         """
         for unit in ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z']:
-            if abs(num) < 999.95:
+            if abs(num) < 999.5:
                 if abs(num) < 99.95:
                     if abs(num) < 9.995:
                         return '{0:1.2f}'.format(num) + unit + suffix
@@ -748,12 +748,19 @@
         if disable is None and hasattr(file, "isatty") and not file.isatty():
             disable = True
 
+        if total is None and iterable is not None:
+            try:
+                total = len(iterable)
+            except (TypeError, AttributeError):
+                total = None
+
         if disable:
             self.iterable = iterable
             self.disable = disable
             self.pos = self._get_free_pos(self)
             self._instances.remove(self)
             self.n = initial
+            self.total = total
             return
 
         if kwargs:
@@ -766,12 +773,6 @@
                 else TqdmKeyError("Unknown argument(s): " + str(kwargs)))
 
         # Preprocess the arguments
-        if total is None and iterable is not None:
-            try:
-                total = len(iterable)
-            except (TypeError, AttributeError):
-                total = None
-
         if ((ncols is None) and (file in (sys.stderr, sys.stdout))) or \
                 dynamic_ncols:  # pragma: no cover
             if dynamic_ncols:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm/_tqdm_notebook.py 
new/tqdm-4.24.0/tqdm/_tqdm_notebook.py
--- old/tqdm-4.23.4/tqdm/_tqdm_notebook.py      2018-05-14 01:34:20.000000000 
+0200
+++ new/tqdm-4.24.0/tqdm/_tqdm_notebook.py      2018-07-26 15:07:34.000000000 
+0200
@@ -92,12 +92,20 @@
         # fp = file
 
         # Prepare IPython progress bar
-        if total:
-            pbar = IntProgress(min=0, max=total)
-        else:  # No total? Show info style bar with no progress tqdm status
-            pbar = IntProgress(min=0, max=1)
-            pbar.value = 1
-            pbar.bar_style = 'info'
+        try:
+            if total:
+                pbar = IntProgress(min=0, max=total)
+            else:  # No total? Show info style bar with no progress tqdm status
+                pbar = IntProgress(min=0, max=1)
+                pbar.value = 1
+                pbar.bar_style = 'info'
+        except NameError:
+            # #187 #451 #558
+            raise ImportError(
+                "IntProgress not found. Please update juputer and ipywidgets."
+                " See https://ipywidgets.readthedocs.io/en/stable";
+                "/user_install.html")
+
         if desc:
             pbar.description = desc
         # Prepare status text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm/_version.py 
new/tqdm-4.24.0/tqdm/_version.py
--- old/tqdm-4.23.4/tqdm/_version.py    2018-05-22 21:03:00.000000000 +0200
+++ new/tqdm-4.24.0/tqdm/_version.py    2018-07-26 15:08:22.000000000 +0200
@@ -5,7 +5,7 @@
 __all__ = ["__version__"]
 
 # major, minor, patch, -extra
-version_info = 4, 23, 4
+version_info = 4, 24, 0
 
 # Nice string for the version
 __version__ = '.'.join(map(str, version_info))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm/tests/tests_tqdm.py 
new/tqdm-4.24.0/tqdm/tests/tests_tqdm.py
--- old/tqdm-4.23.4/tqdm/tests/tests_tqdm.py    2018-05-14 01:34:20.000000000 
+0200
+++ new/tqdm-4.24.0/tqdm/tests/tests_tqdm.py    2018-07-26 15:07:34.000000000 
+0200
@@ -1558,3 +1558,47 @@
     else:
         tqdm.set_lock(mp_lock)
     # TODO: test interleaved output #445
+
+
+@with_setup(pretest, posttest)
+def test_bool():
+    """Test boolean cast"""
+    def internal(our_file, disable):
+        with tqdm(total=10, file=our_file, disable=disable) as t:
+            assert t
+        with tqdm(total=0, file=our_file, disable=disable) as t:
+            assert not t
+        with trange(10, file=our_file, disable=disable) as t:
+            assert t
+        with trange(0, file=our_file, disable=disable) as t:
+            assert not t
+        with tqdm([], file=our_file, disable=disable) as t:
+            assert not t
+        with tqdm([0], file=our_file, disable=disable) as t:
+            assert t
+        with tqdm(file=our_file, disable=disable) as t:
+            try:
+                print(bool(t))
+            except TypeError:
+                pass
+            else:
+                raise TypeError(
+                    "Expected tqdm() with neither total nor iterable to fail")
+
+    # test with and without disable
+    with closing(StringIO()) as our_file:
+        internal(our_file, False)
+        internal(our_file, True)
+
+
+@with_setup(pretest, posttest)
+def test_autonotebook():
+    """Test autonotebook fallback"""
+    from tqdm.autonotebook import tqdm as tn
+    from tqdm.autonotebook import trange as tr
+
+    with closing(StringIO()) as our_file:
+        with tn(total=10, file=our_file) as t:
+            assert len(t) == 10
+        with tr(1337) as t:
+            assert len(t) == 1337
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm.egg-info/PKG-INFO 
new/tqdm-4.24.0/tqdm.egg-info/PKG-INFO
--- old/tqdm-4.23.4/tqdm.egg-info/PKG-INFO      2018-05-22 21:06:50.000000000 
+0200
+++ new/tqdm-4.24.0/tqdm.egg-info/PKG-INFO      2018-07-26 18:27:01.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: tqdm
-Version: 4.23.4
+Version: 4.24.0
 Summary: Fast, Extensible Progress Meter
 Home-page: https://github.com/tqdm/tqdm
 Author: Noam Yorav-Raphael
@@ -675,6 +675,18 @@
         |Screenshot-Jupyter2|
         |Screenshot-Jupyter3|
         
+        It is also possible to let ``tqdm`` automatically choose between
+        console or notebook versions by using the ``autonotebook`` submodule:
+        
+        .. code:: python
+        
+            from tqdm.autonotebook import tqdm
+            tqdm.pandas()
+        
+        Note that this will issue a ``TqdmExperimentalWarning`` if run in a 
notebook
+        since it is not meant to be possible to distinguish between ``jupyter 
notebook``
+        and ``jupyter console``.
+        
         Writing messages
         ~~~~~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tqdm-4.23.4/tqdm.egg-info/SOURCES.txt 
new/tqdm-4.24.0/tqdm.egg-info/SOURCES.txt
--- old/tqdm-4.23.4/tqdm.egg-info/SOURCES.txt   2018-05-22 21:06:50.000000000 
+0200
+++ new/tqdm-4.24.0/tqdm.egg-info/SOURCES.txt   2018-07-26 18:27:01.000000000 
+0200
@@ -16,10 +16,6 @@
 examples/redirect_print.py
 examples/simple_examples.py
 examples/tqdm_wget.py
-examples/progressbar/__init__.py
-examples/progressbar/compat.py
-examples/progressbar/progressbar.py
-examples/progressbar/widgets.py
 tqdm/__init__.py
 tqdm/__main__.py
 tqdm/_main.py


Reply via email to