Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-tqdm for openSUSE:Factory checked in at 2026-03-11 20:49:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-tqdm (Old) and /work/SRC/openSUSE:Factory/.python-tqdm.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tqdm" Wed Mar 11 20:49:43 2026 rev:65 rq:1337901 version:4.67.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-tqdm/python-tqdm.changes 2025-08-26 14:56:49.853973045 +0200 +++ /work/SRC/openSUSE:Factory/.python-tqdm.new.8177/python-tqdm.changes 2026-03-11 20:49:51.056468091 +0100 @@ -1,0 +2,20 @@ +Tue Mar 10 08:19:24 UTC 2026 - Dirk Müller <[email protected]> + +- update to 4.67.3: + * fix py3.7 dependencies + +- update to 4.67.2: + * support `pandas>=3` + * fix `format_interval` for negative numbers + * misc linting + * framework updates + * bump CI workflow & `pre-commit` dependencies + * add `pyupgrade` + * add py3.13 support + * fix py3.7 tests + * update `setuptools-scm` usage + * support auto-dedented docstrings when building docs in + py3.13 + * tests: relax flaky benchmarks + +------------------------------------------------------------------- Old: ---- tqdm-4.67.1.tar.gz New: ---- tqdm-4.67.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-tqdm.spec ++++++ --- /var/tmp/diff_new_pack.Qfq6Ae/_old 2026-03-11 20:49:51.704494363 +0100 +++ /var/tmp/diff_new_pack.Qfq6Ae/_new 2026-03-11 20:49:51.704494363 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-tqdm # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -33,7 +33,7 @@ %endif %{?sle15_python_module_pythons} Name: python-tqdm%{pkg_suffix} -Version: 4.67.1 +Version: 4.67.3 Release: 0 Summary: An extensible progress meter License: MIT AND MPL-2.0 ++++++ tqdm-4.67.1.tar.gz -> tqdm-4.67.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/.pre-commit-config.yaml new/tqdm-4.67.3/.pre-commit-config.yaml --- old/tqdm-4.67.1/.pre-commit-config.yaml 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/.pre-commit-config.yaml 2026-02-03 18:34:16.000000000 +0100 @@ -2,7 +2,7 @@ python: python3 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -39,7 +39,7 @@ - pytest-timeout - pytest-asyncio>=0.24 - repo: https://github.com/PyCQA/flake8 - rev: 7.1.1 + rev: 7.3.0 hooks: - id: flake8 args: [-j8] @@ -50,13 +50,17 @@ - flake8-debugger - flake8-isort - flake8-pyproject - - flake8-string-format +- repo: https://github.com/asottile/pyupgrade + rev: v3.21.2 + hooks: + - id: pyupgrade + args: [--py37-plus] - repo: https://github.com/PyCQA/isort - rev: 5.13.2 + rev: 7.0.0 hooks: - id: isort - repo: https://github.com/kynan/nbstripout - rev: 0.7.1 + rev: 0.9.0 hooks: - id: nbstripout args: [--keep-count, --keep-output] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/CONTRIBUTING.md new/tqdm-4.67.3/CONTRIBUTING.md --- old/tqdm-4.67.1/CONTRIBUTING.md 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/CONTRIBUTING.md 2026-02-03 18:34:16.000000000 +0100 @@ -99,7 +99,7 @@ in [tox.ini](https://github.com/tqdm/tqdm/blob/master/tox.ini), you can use `MiniConda` to install a minimal setup. You must also ensure that each distribution has an alias to call the Python interpreter -(e.g. `python312` for Python 3.12's interpreter). +(e.g. `python313` for Python 3.13's interpreter). ### Alternative unit tests with pytest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/LICENCE new/tqdm-4.67.3/LICENCE --- old/tqdm-4.67.1/LICENCE 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/LICENCE 2026-02-03 18:34:16.000000000 +0100 @@ -7,7 +7,7 @@ in reverse chronological order: * files: * - MPL-2.0 2015-2024 (c) Casper da Costa-Luis + MPL-2.0 2015-2026 (c) Casper da Costa-Luis [casperdcl](https://github.com/casperdcl). * files: tqdm/_tqdm.py MIT 2016 (c) [PR #96] on behalf of Google Inc. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/Makefile new/tqdm-4.67.3/Makefile --- old/tqdm-4.67.1/Makefile 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/Makefile 2026-02-03 18:34:16.000000000 +0100 @@ -113,7 +113,7 @@ @+python -c "fd=open('.dockerignore', 'w'); fd.write('*\n!dist/*.whl\n')" Dockerfile: - @+python -c 'fd=open("Dockerfile", "w"); fd.write("FROM python:3.8-alpine\nCOPY dist/*.whl .\nRUN pip install -U $$(ls ./*.whl) && rm ./*.whl\nENTRYPOINT [\"tqdm\"]\n")' + @+python -c 'fd=open("Dockerfile", "w"); fd.write("FROM python:3.13-alpine\nCOPY dist/*.whl .\nRUN pip install -U $$(ls ./*.whl) && rm ./*.whl\nENTRYPOINT [\"tqdm\"]\n")' distclean: @+make coverclean @@ -124,7 +124,6 @@ @+python -c "import shutil; shutil.rmtree('dist', True)" @+python -c "import shutil; shutil.rmtree('tqdm.egg-info', True)" @+python -c "import shutil; shutil.rmtree('.eggs', True)" - @+python -c "import os; os.remove('tqdm/_dist_ver.py') if os.path.exists('tqdm/_dist_ver.py') else None" coverclean: @+python -c "import os; os.remove('.coverage') if os.path.exists('.coverage') else None" @+python -c "import os, glob; [os.remove(i) for i in glob.glob('.coverage.*')]" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/PKG-INFO new/tqdm-4.67.3/PKG-INFO --- old/tqdm-4.67.1/PKG-INFO 2024-11-24 21:12:11.768507000 +0100 +++ new/tqdm-4.67.3/PKG-INFO 2026-02-03 18:35:32.658512600 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: tqdm -Version: 4.67.1 +Version: 4.67.3 Summary: Fast, Extensible Progress Meter Maintainer-email: tqdm developers <[email protected]> License: MPL-2.0 AND MIT @@ -22,8 +22,6 @@ Classifier: Intended Audience :: End Users/Desktop Classifier: Intended Audience :: Other Audience Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: MIT License -Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) Classifier: Operating System :: MacOS Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft @@ -43,6 +41,7 @@ Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation Classifier: Programming Language :: Python :: Implementation :: IronPython @@ -68,6 +67,7 @@ Description-Content-Type: text/x-rst License-File: LICENCE Requires-Dist: colorama; platform_system == "Windows" +Requires-Dist: importlib_metadata; python_version < "3.8" Provides-Extra: dev Requires-Dist: pytest>=6; extra == "dev" Requires-Dist: pytest-cov; extra == "dev" @@ -82,6 +82,7 @@ Requires-Dist: requests; extra == "telegram" Provides-Extra: notebook Requires-Dist: ipywidgets>=6; extra == "notebook" +Dynamic: license-file |Logo| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/examples/7zx.py new/tqdm-4.67.3/examples/7zx.py --- old/tqdm-4.67.1/examples/7zx.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/examples/7zx.py 2026-02-03 18:34:16.000000000 +0100 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """Usage: 7zx.py [--help | options] <zipfiles>... @@ -18,7 +17,6 @@ NOTSET -d, --debug-trace Print lots of debugging information (-D NOTSET) """ -import io import logging import os import pty @@ -81,7 +79,7 @@ stdout=md, # subprocess.PIPE, stderr=subprocess.STDOUT) os.close(sd) - with io.open(md, mode="rU", buffering=1) as m: + with open(md, buffering=1) as m: with tqdm(total=sum(fcomp.values()), disable=len(zips) < 2, leave=False, unit="B", unit_scale=True) as t: if not hasattr(t, "start_t"): # disabled @@ -89,7 +87,7 @@ while True: try: l_raw = m.readline() - except IOError: + except OSError: break ln = l_raw.strip() if ln.startswith("Extracting"): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/pyproject.toml new/tqdm-4.67.3/pyproject.toml --- old/tqdm-4.67.1/pyproject.toml 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/pyproject.toml 2026-02-03 18:34:16.000000000 +0100 @@ -1,10 +1,8 @@ [build-system] -requires = ["setuptools>=42", "wheel", "setuptools_scm[toml]>=3.4"] +requires = ["setuptools>=42", "setuptools-scm[toml]>=3.4"] build-backend = "setuptools.build_meta" [tool.setuptools_scm] -write_to = "tqdm/_dist_ver.py" -write_to_template = "__version__ = '{version}'\n" [tool.setuptools.packages.find] exclude = ["benchmarks", "examples", "tests", "wiki", "docs", "feedstock"] @@ -39,8 +37,6 @@ "Intended Audience :: End Users/Desktop", "Intended Audience :: Other Audience", "Intended Audience :: System Administrators", - "License :: OSI Approved :: MIT License", - "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Operating System :: MacOS", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft", @@ -60,6 +56,7 @@ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation", "Programming Language :: Python :: Implementation :: IronPython", @@ -81,7 +78,7 @@ "Topic :: System :: Shells", "Topic :: Terminals", "Topic :: Utilities"] -dependencies = ['colorama; platform_system == "Windows"'] +dependencies = ['colorama; platform_system == "Windows"', 'importlib_metadata; python_version < "3.8"'] [project.optional-dependencies] dev = ["pytest>=6", "pytest-cov", "pytest-timeout", "pytest-asyncio>=0.24", "nbval"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tests/conftest.py new/tqdm-4.67.3/tests/conftest.py --- old/tqdm-4.67.1/tests/conftest.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tests/conftest.py 2026-02-03 18:34:16.000000000 +0100 @@ -18,10 +18,10 @@ n = len(tqdm._instances) if n: tqdm._instances.clear() - raise EnvironmentError(f"{n} `tqdm` instances still in existence PRE-test") + raise OSError(f"{n} `tqdm` instances still in existence PRE-test") yield if getattr(tqdm, "_instances", False): n = len(tqdm._instances) if n: tqdm._instances.clear() - raise EnvironmentError(f"{n} `tqdm` instances still in existence POST-test") + raise OSError(f"{n} `tqdm` instances still in existence POST-test") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tests/tests_itertools.py new/tqdm-4.67.3/tests/tests_itertools.py --- old/tqdm-4.67.1/tests/tests_itertools.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tests/tests_itertools.py 2026-02-03 18:34:16.000000000 +0100 @@ -8,13 +8,12 @@ from .tests_tqdm import StringIO, closing -class NoLenIter(object): +class NoLenIter: def __init__(self, iterable): self._it = iterable def __iter__(self): - for i in self._it: - yield i + yield from self._it def test_product(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tests/tests_pandas.py new/tqdm-4.67.3/tests/tests_pandas.py --- old/tqdm-4.67.1/tests/tests_pandas.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tests/tests_pandas.py 2026-02-03 18:34:16.000000000 +0100 @@ -77,16 +77,18 @@ def task_func(x): return x + 1 - # applymap - res1 = df.progress_applymap(task_func) - res2 = df.applymap(task_func) - assert res1.equals(res2) - - # map if hasattr(df, 'map'): # pandas>=2.1.0 + # map res1 = df.progress_map(task_func) res2 = df.map(task_func) assert res1.equals(res2) + assert '200/200' in our_file.getvalue() + else: + # applymap + res1 = df.progress_applymap(task_func) + res2 = df.applymap(task_func) + assert res1.equals(res2) + assert '20000/20000' in our_file.getvalue() # apply unhashable res1 = [] @@ -98,25 +100,17 @@ res3 = df.progress_apply(task_func, axis=axis) res4 = df.apply(task_func, axis=axis) assert res3.equals(res4) + assert '200/200' in our_file.getvalue() # axis=0 + assert '100/100' in our_file.getvalue() # axis=1 our_file.seek(0) - if our_file.read().count('100%') < 3: + if our_file.read().count('100%') < 6: our_file.seek(0) raise AssertionError( - f"\nExpected:\n100% at least three times\nIn:\n{our_file.read()}\n") - - # apply_map, apply axis=0, apply axis=1 - expects = ['20000/20000', '200/200', '100/100'] - for exres in expects: - our_file.seek(0) - if our_file.getvalue().count(exres) < 1: - our_file.seek(0) - raise AssertionError( - f"\nExpected:\n{exres} at least once.\nIn:\n{our_file.read()}\n") + f"\nExpected:\n100% at least 6 times\nIn:\n{our_file.read()}\n") [email protected]( - "ignore:DataFrameGroupBy.apply operated on the grouping columns:DeprecationWarning") [email protected]("ignore:DataFrameGroupBy.apply operated on the grouping columns") def test_pandas_groupby_apply(): """Test pandas.DataFrame.groupby(...).progress_apply""" with closing(StringIO()) as our_file: @@ -169,8 +163,7 @@ f"\nExpected:\n{exres} at least once.\nIn:\n{our_file.read()}\n") [email protected]( - "ignore:DataFrameGroupBy.apply operated on the grouping columns:DeprecationWarning") [email protected]("ignore:DataFrameGroupBy.apply operated on the grouping columns") def test_pandas_leave(): """Test pandas with `leave=True`""" with closing(StringIO()) as our_file: @@ -205,8 +198,7 @@ "keyword arguments instead")) [email protected]( - "ignore:DataFrameGroupBy.apply operated on the grouping columns:DeprecationWarning") [email protected]("ignore:DataFrameGroupBy.apply operated on the grouping columns") def test_pandas_deprecation(): """Test bar object instance as argument deprecation""" try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tests/tests_synchronisation.py new/tqdm-4.67.3/tests/tests_synchronisation.py --- old/tqdm-4.67.1/tests/tests_synchronisation.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tests/tests_synchronisation.py 2026-02-03 18:34:16.000000000 +0100 @@ -7,7 +7,7 @@ from .tests_tqdm import StringIO, closing, importorskip, patch_lock, skip -class Time(object): +class Time: """Fake time class class providing an offset""" offset = 0 @@ -78,7 +78,7 @@ return timer -class FakeTqdm(object): +class FakeTqdm: _instances = set() get_lock = tqdm.get_lock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tests/tests_tqdm.py new/tqdm-4.67.3/tests/tests_tqdm.py --- old/tqdm-4.67.1/tests/tests_tqdm.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tests/tests_tqdm.py 2026-02-03 18:34:16.000000000 +0100 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Advice: use repr(our_file.read()) to print the full output of tqdm # (else '\r' will replace the previous lines and you'll see only the latest. import csv @@ -80,7 +79,7 @@ return res -class DiscreteTimer(object): +class DiscreteTimer: """Virtual discrete time manager, to precisely control time for tests""" def __init__(self): self.t = 0.0 @@ -180,6 +179,10 @@ assert format_interval(60) == '01:00' assert format_interval(6160) == '1:42:40' assert format_interval(238113) == '66:08:33' + assert format_interval(-1) == '-00:01' + assert format_interval(-60) == '-01:00' + assert format_interval(-100000) == '-27:46:40' + assert format_interval(0) == '00:00' def test_format_num(): @@ -353,7 +356,7 @@ """Native strings written to unspecified files""" stderr = sys.stderr try: - sys.stderr = WriteTypeChecker(expected_type=type('')) + sys.stderr = WriteTypeChecker(expected_type=str) for _ in tqdm(range(3)): pass sys.stderr.encoding = None # py2 behaviour @@ -365,20 +368,20 @@ def test_unicode_string_io_for_specified_file(): """Unicode strings written to specified files""" - for _ in tqdm(range(3), file=WriteTypeChecker(expected_type=type(u''))): + for _ in tqdm(range(3), file=WriteTypeChecker(expected_type=str)): pass def test_write_bytes(): """Test write_bytes argument with and without `file`""" # specified file (and bytes) - for _ in tqdm(range(3), file=WriteTypeChecker(expected_type=type(b'')), + for _ in tqdm(range(3), file=WriteTypeChecker(expected_type=bytes), write_bytes=True): pass # unspecified file (and unicode) stderr = sys.stderr try: - sys.stderr = WriteTypeChecker(expected_type=type(u'')) + sys.stderr = WriteTypeChecker(expected_type=str) for _ in tqdm(range(3), write_bytes=False): pass finally: @@ -869,9 +872,9 @@ for _ in range(3): t.update() res = our_file.getvalue().strip("\r").split("\r") - assert u"7%|\u258b" in res[1] - assert u"13%|\u2588\u258e" in res[2] - assert u"20%|\u2588\u2588" in res[3] + assert "7%|\u258b" in res[1] + assert "13%|\u2588\u258e" in res[2] + assert "20%|\u2588\u2588" in res[3] # Test custom bar for bars in [" .oO0", " #"]: @@ -1323,7 +1326,7 @@ # unicode with closing(StringIO()) as our_file: with tqdm(total=10, file=our_file) as t: - t.set_description(u"\xe1\xe9\xed\xf3\xfa") + t.set_description("\xe1\xe9\xed\xf3\xfa") def test_deprecated_gui(): @@ -1446,8 +1449,8 @@ t2.close() # Check that refreshing indeed forced the display to use realtime state - assert before == [u'pos0 bar: 0%|', u'pos1 bar: 0%|'] - assert after == [u'pos0 bar: 10%|', u'pos1 bar: 10%|'] + assert before == ['pos0 bar: 0%|', 'pos1 bar: 0%|'] + assert after == ['pos0 bar: 10%|', 'pos1 bar: 10%|'] def test_disabled_repr(capsys): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tox.ini new/tqdm-4.67.3/tox.ini --- old/tqdm-4.67.1/tox.ini 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tox.ini 2026-02-03 18:34:16.000000000 +0100 @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist=py{37,38,39,310,311,312,py3}{,-tf}{,-keras}, perf, check +envlist=py{37,38,39,310,311,312,313,py3}{,-tf}{,-keras}, perf, check isolated_build=True [gh-actions] @@ -15,6 +15,7 @@ 3.10: py310 3.11: py311 3.12: py312 + 3.13: py313 pypy-3.7: pypy3 [gh-actions:env] PLATFORM= @@ -27,7 +28,9 @@ pytest-timeout pytest-asyncio ipywidgets - git+https://github.com/casperdcl/nbval.git@master#egg=nbval + py37: importlib_resources + py37: git+https://github.com/casperdcl/nbval@named-cells-py37 + !py37: git+https://github.com/casperdcl/nbval coverage coveralls codecov diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/_dist_ver.py new/tqdm-4.67.3/tqdm/_dist_ver.py --- old/tqdm-4.67.1/tqdm/_dist_ver.py 2024-11-24 21:12:11.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/_dist_ver.py 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -__version__ = '4.67.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/cli.py new/tqdm-4.67.3/tqdm/cli.py --- old/tqdm-4.67.1/tqdm/cli.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/cli.py 2026-02-03 18:34:16.000000000 +0100 @@ -249,7 +249,7 @@ manpath = tqdm_args.pop('manpath', None) comppath = tqdm_args.pop('comppath', None) if tqdm_args.pop('null', False): - class stdout(object): + class stdout: @staticmethod def write(_): pass @@ -278,7 +278,7 @@ stdout_write = stdout.write fp_write = getattr(fp, 'buffer', fp).write - class stdout(object): # pylint: disable=function-redefined + class stdout: # pylint: disable=function-redefined @staticmethod def write(x): with tqdm.external_write_mode(file=fp): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/contrib/__init__.py new/tqdm-4.67.3/tqdm/contrib/__init__.py --- old/tqdm-4.67.1/tqdm/contrib/__init__.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/contrib/__init__.py 2026-02-03 18:34:16.000000000 +0100 @@ -76,8 +76,7 @@ """ kwargs = tqdm_kwargs.copy() tqdm_class = kwargs.pop("tqdm_class", tqdm_auto) - for i in zip(tqdm_class(iter1, **kwargs), *iter2plus): - yield i + yield from zip(tqdm_class(iter1, **kwargs), *iter2plus) def tmap(function, *sequences, **tqdm_kwargs): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/contrib/utils_worker.py new/tqdm-4.67.3/tqdm/contrib/utils_worker.py --- old/tqdm-4.67.1/tqdm/contrib/utils_worker.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/contrib/utils_worker.py 2026-02-03 18:34:16.000000000 +0100 @@ -10,7 +10,7 @@ __all__ = ['MonoWorker'] -class MonoWorker(object): +class MonoWorker: """ Supports one running task and one waiting task. The waiting task is the most recent submitted (others are discarded). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/notebook.py new/tqdm-4.67.3/tqdm/notebook.py --- old/tqdm-4.67.1/tqdm/notebook.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/notebook.py 2026-02-03 18:34:16.000000000 +0100 @@ -157,7 +157,7 @@ pbar.value = self.n if msg: - msg = msg.replace(' ', u'\u2007') # fix html space padding + msg = msg.replace(' ', '\u2007') # fix html space padding # html escape special characters (like '&') if '<bar/>' in msg: left, right = map(escape, re.split(r'\|?<bar/>\|?', msg, maxsplit=1)) @@ -247,9 +247,7 @@ def __iter__(self): try: it = super().__iter__() - for obj in it: - # return super(tqdm...) will not catch exception - yield obj + yield from it # NB: except ... [ as ...] breaks IPython async KeyboardInterrupt except: # NOQA self.disp(bar_style='danger') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/std.py new/tqdm-4.67.3/tqdm/std.py --- old/tqdm-4.67.1/tqdm/std.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/std.py 2026-02-03 18:34:16.000000000 +0100 @@ -42,11 +42,11 @@ Used for non-external-code-breaking errors, such as garbled printing. """ - def __init__(self, msg, fp_write=None, *a, **k): + def __init__(self, msg, fp_write=None): # noqa: B042 if fp_write is not None: fp_write("\n" + self.__class__.__name__ + ": " + str(msg).rstrip() + '\n') else: - super().__init__(msg, *a, **k) + super().__init__(msg) class TqdmExperimentalWarning(TqdmWarning, FutureWarning): @@ -73,7 +73,7 @@ pass -class TqdmDefaultWriteLock(object): +class TqdmDefaultWriteLock: """ Provide a default write lock for thread and multiprocessing safety. Works only on platforms supporting `fork` (so Windows is excluded). @@ -128,7 +128,7 @@ warn("create_th_lock not needed anymore", TqdmDeprecationWarning, stacklevel=2) -class Bar(object): +class Bar: """ `str.format`-able bar with format specifiers: `[width][type]` @@ -142,7 +142,7 @@ + `b`: blank (`charset=" "` override) """ ASCII = " 123456789#" - UTF = u" " + u''.join(map(chr, range(0x258F, 0x2587, -1))) + UTF = " " + ''.join(map(chr, range(0x258F, 0x2587, -1))) BLANK = " " COLOUR_RESET = '\x1b[0m' COLOUR_RGB = '\x1b[38;2;%d;%d;%dm' @@ -178,9 +178,8 @@ else: raise KeyError except (KeyError, AttributeError): - warn("Unknown colour (%s); valid choices: [hex (#00ff00), %s]" % ( - value, ", ".join(self.COLOURS)), - TqdmWarning, stacklevel=2) + warn(f"Unknown colour ({value}); valid choices:" + f" [hex (#00ff00), {', '.join(self.COLOURS)}]", TqdmWarning, stacklevel=2) self._colour = None def __format__(self, format_spec): @@ -211,7 +210,7 @@ return self.colour + res + self.COLOUR_RESET if self.colour else res -class EMA(object): +class EMA: """ Exponential moving average: smoothing to give progressively lower weights to older values. @@ -412,9 +411,10 @@ out : str [H:]MM:SS """ - mins, s = divmod(int(t), 60) + sign = '-' if t < 0 else '' + mins, s = divmod(abs(int(t)), 60) h, m = divmod(mins, 60) - return f'{h:d}:{m:02d}:{s:02d}' if h else f'{m:02d}:{s:02d}' + return f'{sign}{h:d}:{m:02d}:{s:02d}' if h else f'{sign}{m:02d}:{s:02d}' @staticmethod def format_num(n): @@ -893,10 +893,10 @@ " Use keyword arguments instead.", fp_write=getattr(t.fp, 'write', sys.stderr.write)) - try: # pandas>=1.3.0 + try: # pandas>=1.3.0,<3.0 from pandas.core.common import is_builtin_func - except ImportError: - is_builtin_func = df._is_builtin_func + except ImportError: # pandas<1.3.0 + is_builtin_func = getattr(df, '_is_builtin_func', lambda f: f) try: func = is_builtin_func(func) except TypeError: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/tqdm.1 new/tqdm-4.67.3/tqdm/tqdm.1 --- old/tqdm-4.67.1/tqdm/tqdm.1 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/tqdm.1 2026-02-03 18:34:16.000000000 +0100 @@ -1,77 +1,64 @@ -.\" Automatically generated by Pandoc 1.19.2 +.\" Automatically generated by Pandoc 3.8.3 .\" -.TH "TQDM" "1" "2015\-2021" "tqdm User Manuals" "" -.hy +.TH "TQDM" "1" "2015\-2026" "tqdm User Manuals" .SH NAME -.PP tqdm \- fast, extensible progress bar for Python and CLI .SH SYNOPSIS -.PP -tqdm [\f[I]options\f[]] +tqdm [\f[I]options\f[R]] .SH DESCRIPTION -.PP -See <https://github.com/tqdm/tqdm>. +See \c +.UR https://github.com/tqdm/tqdm +.UE \c +\&. Can be used as a pipe: .IP -.nf -\f[C] -$\ #\ count\ lines\ of\ code -$\ cat\ *.py\ |\ tqdm\ |\ wc\ \-l -327it\ [00:00,\ 981773.38it/s] +.EX +$ \f[I]# count lines of code\f[R] +$ cat *.py \f[B]|\f[R] tqdm \f[B]|\f[R] wc \-l +327it [00:00, 981773.38it/s] 327 -$\ #\ find\ all\ files -$\ find\ .\ \-name\ "*.py"\ |\ tqdm\ |\ wc\ \-l -432it\ [00:00,\ 833842.30it/s] +$ \f[I]# find all files\f[R] +$ find . \-name \(dq*.py\(dq \f[B]|\f[R] tqdm \f[B]|\f[R] wc \-l +432it [00:00, 833842.30it/s] 432 -#\ ...\ and\ more\ info -$\ find\ .\ \-name\ \[aq]*.py\[aq]\ \-exec\ wc\ \-l\ \\{}\ \\;\ \\ -\ \ |\ tqdm\ \-\-total\ 432\ \-\-unit\ files\ \-\-desc\ counting\ \\ -\ \ |\ awk\ \[aq]{\ sum\ +=\ $1\ };\ END\ {\ print\ sum\ }\[aq] -counting:\ 100%|█████████|\ 432/432\ [00:00<00:00,\ 794361.83files/s] +\f[I]# ... and more info\f[R] +$ find . \-name \(aq*.py\(aq \-exec wc \-l \(rs{} \(rs; \(rs + \f[B]|\f[R] tqdm \-\-total 432 \-\-unit files \-\-desc counting \(rs + \f[B]|\f[R] awk \(aq{ sum += $1 }; END { print sum }\(aq +counting: 100%\f[B]|\f[R]█████████\f[B]|\f[R] 432/432 [00:00<00:00, 794361.83files/s] 131998 -\f[] -.fi +.EE .SH OPTIONS .TP -.B \-h, \-\-help +\-h, \-\-help Print this help and exit. -.RS -.RE .TP -.B \-v, \-\-version +\-v, \-\-version Print version and exit. -.RS -.RE .TP -.B \-\-desc=\f[I]desc\f[] +\-\-desc=\f[I]desc\f[R] str, optional. Prefix for the progressbar. -.RS -.RE .TP -.B \-\-total=\f[I]total\f[] +\-\-total=\f[I]total\f[R] int or float, optional. The number of expected iterations. If unspecified, len(iterable) is used if possible. -If float("inf") or as a last resort, only basic progress statistics are -displayed (no ETA, no progressbar). -If \f[C]gui\f[] is True and this parameter needs subsequent updating, -specify an initial arbitrary large positive number, e.g. -9e9. -.RS -.RE +If float(\(lqinf\(rq) or as a last resort, only basic progress +statistics are displayed (no ETA, no progressbar). +If \f[CR]gui\f[R] is True and this parameter needs subsequent updating, +specify an initial arbitrary large positive number, e.g.\ 9e9. .TP -.B \-\-leave +\-\-leave bool, optional. If [default: True], keeps all traces of the progressbar upon termination of iteration. -If \f[C]None\f[], will leave only if \f[C]position\f[] is \f[C]0\f[]. -.RS -.RE +If \f[CR]None\f[R], will leave only if \f[CR]position\f[R] is +\f[CR]0\f[R]. .TP -.B \-\-ncols=\f[I]ncols\f[] +\-\-ncols=\f[I]ncols\f[R] int, optional. The width of the entire output message. If specified, dynamically resizes the progressbar to stay within this @@ -80,235 +67,177 @@ The fallback is a meter width of 10 and no limit for the counter and statistics. If 0, will not print any meter (only stats). -.RS -.RE .TP -.B \-\-mininterval=\f[I]mininterval\f[] +\-\-mininterval=\f[I]mininterval\f[R] float, optional. Minimum progress display update interval [default: 0.1] seconds. -.RS -.RE .TP -.B \-\-maxinterval=\f[I]maxinterval\f[] +\-\-maxinterval=\f[I]maxinterval\f[R] float, optional. Maximum progress display update interval [default: 10] seconds. -Automatically adjusts \f[C]miniters\f[] to correspond to -\f[C]mininterval\f[] after long display update lag. -Only works if \f[C]dynamic_miniters\f[] or monitor thread is enabled. -.RS -.RE +Automatically adjusts \f[CR]miniters\f[R] to correspond to +\f[CR]mininterval\f[R] after long display update lag. +Only works if \f[CR]dynamic_miniters\f[R] or monitor thread is enabled. .TP -.B \-\-miniters=\f[I]miniters\f[] +\-\-miniters=\f[I]miniters\f[R] int or float, optional. Minimum progress display update interval, in iterations. -If 0 and \f[C]dynamic_miniters\f[], will automatically adjust to equal -\f[C]mininterval\f[] (more CPU efficient, good for tight loops). +If 0 and \f[CR]dynamic_miniters\f[R], will automatically adjust to equal +\f[CR]mininterval\f[R] (more CPU efficient, good for tight loops). If > 0, will skip display of specified number of iterations. -Tweak this and \f[C]mininterval\f[] to get very efficient loops. +Tweak this and \f[CR]mininterval\f[R] to get very efficient loops. If your progress is erratic with both fast and slow iterations (network, skipping items, etc) you should set miniters=1. -.RS -.RE .TP -.B \-\-ascii=\f[I]ascii\f[] +\-\-ascii=\f[I]ascii\f[R] bool or str, optional. If unspecified or False, use unicode (smooth blocks) to fill the meter. -The fallback is to use ASCII characters " 123456789#". -.RS -.RE +The fallback is to use ASCII characters \(rq 123456789#\(lq. .TP -.B \-\-disable +\-\-disable bool, optional. Whether to disable the entire progressbar wrapper [default: False]. If set to None, disable on non\-TTY. -.RS -.RE .TP -.B \-\-unit=\f[I]unit\f[] +\-\-unit=\f[I]unit\f[R] str, optional. String that will be used to define the unit of each iteration [default: it]. -.RS -.RE .TP -.B \-\-unit\-scale=\f[I]unit_scale\f[] +\-\-unit\-scale=\f[I]unit_scale\f[R] bool or int or float, optional. If 1 or True, the number of iterations will be reduced/scaled automatically and a metric prefix following the International System of -Units standard will be added (kilo, mega, etc.) [default: False]. -If any other non\-zero number, will scale \f[C]total\f[] and \f[C]n\f[]. -.RS -.RE +Units standard will be added (kilo, mega, etc.) +[default: False]. +If any other non\-zero number, will scale \f[CR]total\f[R] and +\f[CR]n\f[R]. .TP -.B \-\-dynamic\-ncols +\-\-dynamic\-ncols bool, optional. -If set, constantly alters \f[C]ncols\f[] and \f[C]nrows\f[] to the +If set, constantly alters \f[CR]ncols\f[R] and \f[CR]nrows\f[R] to the environment (allowing for window resizes) [default: False]. -.RS -.RE .TP -.B \-\-smoothing=\f[I]smoothing\f[] +\-\-smoothing=\f[I]smoothing\f[R] float, optional. Exponential moving average smoothing factor for speed estimates (ignored in GUI mode). Ranges from 0 (average speed) to 1 (current/instantaneous speed) [default: 0.3]. -.RS -.RE .TP -.B \-\-bar\-format=\f[I]bar_format\f[] +\-\-bar\-format=\f[I]bar_format\f[R] str, optional. Specify a custom bar string formatting. May impact performance. -[default: \[aq]{l_bar}{bar}{r_bar}\[aq]], where l_bar=\[aq]{desc}: -{percentage:3.0f}%|\[aq] and r_bar=\[aq]| {n_fmt}/{total_fmt} -[{elapsed}<{remaining}, \[aq] \[aq]{rate_fmt}{postfix}]\[aq] Possible -vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, percentage, -elapsed, elapsed_s, ncols, nrows, desc, unit, rate, rate_fmt, -rate_noinv, rate_noinv_fmt, rate_inv, rate_inv_fmt, postfix, -unit_divisor, remaining, remaining_s, eta. -Note that a trailing ": " is automatically removed after {desc} if the -latter is empty. -.RS -.RE +[default: `{l_bar}{bar}{r_bar}'], where l_bar=`{desc}: +{percentage:3.0f}%|' and r_bar=`| {n_fmt}/{total_fmt} +[{elapsed}<{remaining}, \(cq \(cq{rate_fmt}{postfix}]' Possible vars: +l_bar, bar, r_bar, n, n_fmt, total, total_fmt, percentage, elapsed, +elapsed_s, ncols, nrows, desc, unit, rate, rate_fmt, rate_noinv, +rate_noinv_fmt, rate_inv, rate_inv_fmt, postfix, unit_divisor, +remaining, remaining_s, eta. +Note that a trailing \(lq:\(rq is automatically removed after {desc} if +the latter is empty. .TP -.B \-\-initial=\f[I]initial\f[] +\-\-initial=\f[I]initial\f[R] int or float, optional. The initial counter value. Useful when restarting a progress bar [default: 0]. -If using float, consider specifying \f[C]{n:.3f}\f[] or similar in -\f[C]bar_format\f[], or specifying \f[C]unit_scale\f[]. -.RS -.RE +If using float, consider specifying \f[CR]{n:.3f}\f[R] or similar in +\f[CR]bar_format\f[R], or specifying \f[CR]unit_scale\f[R]. .TP -.B \-\-position=\f[I]position\f[] +\-\-position=\f[I]position\f[R] int, optional. Specify the line offset to print this bar (starting from 0) Automatic if unspecified. Useful to manage multiple bars at once (eg, from threads). -.RS -.RE .TP -.B \-\-postfix=\f[I]postfix\f[] +\-\-postfix=\f[I]postfix\f[R] dict or *, optional. Specify additional stats to display at the end of the bar. -Calls \f[C]set_postfix(**postfix)\f[] if possible (dict). -.RS -.RE +Calls \f[CR]set_postfix(**postfix)\f[R] if possible (dict). .TP -.B \-\-unit\-divisor=\f[I]unit_divisor\f[] +\-\-unit\-divisor=\f[I]unit_divisor\f[R] float, optional. -[default: 1000], ignored unless \f[C]unit_scale\f[] is True. -.RS -.RE +[default: 1000], ignored unless \f[CR]unit_scale\f[R] is True. .TP -.B \-\-write\-bytes +\-\-write\-bytes bool, optional. Whether to write bytes. If (default: False) will write unicode. -.RS -.RE .TP -.B \-\-lock\-args=\f[I]lock_args\f[] +\-\-lock\-args=\f[I]lock_args\f[R] tuple, optional. -Passed to \f[C]refresh\f[] for intermediate output (initialisation, +Passed to \f[CR]refresh\f[R] for intermediate output (initialisation, iterating, and updating). -.RS -.RE .TP -.B \-\-nrows=\f[I]nrows\f[] +\-\-nrows=\f[I]nrows\f[R] int, optional. The screen height. If specified, hides nested bars outside this bound. If unspecified, attempts to use environment height. The fallback is 20. -.RS -.RE .TP -.B \-\-colour=\f[I]colour\f[] +\-\-colour=\f[I]colour\f[R] str, optional. -Bar colour (e.g. -\[aq]green\[aq], \[aq]#00ff00\[aq]). -.RS -.RE +Bar colour (e.g.\ `green', `#00ff00'). .TP -.B \-\-delay=\f[I]delay\f[] +\-\-delay=\f[I]delay\f[R] float, optional. -Don\[aq]t display until [default: 0] seconds have elapsed. -.RS -.RE +Don\(cqt display until [default: 0] seconds have elapsed. .TP -.B \-\-delim=\f[I]delim\f[] +\-\-delim=\f[I]delim\f[R] chr, optional. -Delimiting character [default: \[aq]\\n\[aq]]. -Use \[aq]\\0\[aq] for null. -N.B.: on Windows systems, Python converts \[aq]\\n\[aq] to -\[aq]\\r\\n\[aq]. -.RS -.RE +Delimiting character [default: `\(rsn']. +Use `\(rs0' for null. +N.B.: on Windows systems, Python converts `\(rsn' to `\(rsr\(rsn'. .TP -.B \-\-buf\-size=\f[I]buf_size\f[] +\-\-buf\-size=\f[I]buf_size\f[R] int, optional. -String buffer size in bytes [default: 256] used when \f[C]delim\f[] is +String buffer size in bytes [default: 256] used when \f[CR]delim\f[R] is specified. -.RS -.RE .TP -.B \-\-bytes +\-\-bytes bool, optional. -If true, will count bytes, ignore \f[C]delim\f[], and default -\f[C]unit_scale\f[] to True, \f[C]unit_divisor\f[] to 1024, and -\f[C]unit\f[] to \[aq]B\[aq]. -.RS -.RE +If true, will count bytes, ignore \f[CR]delim\f[R], and default +\f[CR]unit_scale\f[R] to True, \f[CR]unit_divisor\f[R] to 1024, and +\f[CR]unit\f[R] to `B'. .TP -.B \-\-tee +\-\-tee bool, optional. -If true, passes \f[C]stdin\f[] to both \f[C]stderr\f[] and -\f[C]stdout\f[]. -.RS -.RE +If true, passes \f[CR]stdin\f[R] to both \f[CR]stderr\f[R] and +\f[CR]stdout\f[R]. .TP -.B \-\-update +\-\-update bool, optional. -If true, will treat input as newly elapsed iterations, i.e. -numbers to pass to \f[C]update()\f[]. -Note that this is slow (~2e5 it/s) since every input must be decoded as -a number. -.RS -.RE +If true, will treat input as newly elapsed iterations, i.e.\ numbers to +pass to \f[CR]update()\f[R]. +Note that this is slow (\(ti2e5 it/s) since every input must be decoded +as a number. .TP -.B \-\-update\-to +\-\-update\-to bool, optional. -If true, will treat input as total elapsed iterations, i.e. -numbers to assign to \f[C]self.n\f[]. -Note that this is slow (~2e5 it/s) since every input must be decoded as -a number. -.RS -.RE +If true, will treat input as total elapsed iterations, i.e.\ numbers to +assign to \f[CR]self.n\f[R]. +Note that this is slow (\(ti2e5 it/s) since every input must be decoded +as a number. .TP -.B \-\-null +\-\-null bool, optional. If true, will discard input (no stdout). -.RS -.RE .TP -.B \-\-manpath=\f[I]manpath\f[] +\-\-manpath=\f[I]manpath\f[R] str, optional. Directory in which to install tqdm man pages. -.RS -.RE .TP -.B \-\-comppath=\f[I]comppath\f[] +\-\-comppath=\f[I]comppath\f[R] str, optional. Directory in which to place tqdm completion. -.RS -.RE .TP -.B \-\-log=\f[I]log\f[] +\-\-log=\f[I]log\f[R] str, optional. -CRITICAL|FATAL|ERROR|WARN(ING)|[default: \[aq]INFO\[aq]]|DEBUG|NOTSET. -.RS -.RE +CRITICAL|FATAL|ERROR|WARN(ING)|[default: `INFO']|DEBUG|NOTSET. .SH AUTHORS -tqdm developers <https://github.com/tqdm>. +tqdm developers \c +.UR https://github.com/tqdm +.UE \c. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/utils.py new/tqdm-4.67.3/tqdm/utils.py --- old/tqdm-4.67.1/tqdm/utils.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/utils.py 2026-02-03 18:34:16.000000000 +0100 @@ -99,7 +99,7 @@ return wrap -class FormatReplace(object): +class FormatReplace: """ >>> a = FormatReplace('something') >>> f"{a:5d}" @@ -114,7 +114,7 @@ return self.replace -class Comparable(object): +class Comparable: """Assumes child has self._comparable attr/@property""" def __lt__(self, other): return self._comparable < other._comparable @@ -135,7 +135,7 @@ return not self < other -class ObjectWrapper(object): +class ObjectWrapper: def __getattr__(self, name): return getattr(self._wrapped, name) @@ -210,7 +210,7 @@ pass return inner - def __init__(self, wrapped, tqdm_instance): + def __init__(self, wrapped, tqdm_instance): # noqa: B042 super().__init__(wrapped) if hasattr(wrapped, 'write'): self.wrapper_setattr( @@ -251,7 +251,7 @@ def _is_utf(encoding): try: - u'\u2588\u2589'.encode(encoding) + '\u2588\u2589'.encode(encoding) except UnicodeEncodeError: return False except Exception: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm/version.py new/tqdm-4.67.3/tqdm/version.py --- old/tqdm-4.67.1/tqdm/version.py 2024-11-24 21:11:41.000000000 +0100 +++ new/tqdm-4.67.3/tqdm/version.py 2026-02-03 18:34:16.000000000 +0100 @@ -1,9 +1,10 @@ """`tqdm` version detector. Precedence: installed dist, git, 'UNKNOWN'.""" try: - from ._dist_ver import __version__ -except ImportError: - try: - from setuptools_scm import get_version - __version__ = get_version(root='..', relative_to=__file__) - except (ImportError, LookupError): - __version__ = "UNKNOWN" + from importlib.metadata import PackageNotFoundError, version +except ImportError: # py<3.8 + from importlib_metadata import PackageNotFoundError, version + +try: + __version__ = version('tqdm') +except PackageNotFoundError: + __version__ = "UNKNOWN" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm.egg-info/PKG-INFO new/tqdm-4.67.3/tqdm.egg-info/PKG-INFO --- old/tqdm-4.67.1/tqdm.egg-info/PKG-INFO 2024-11-24 21:12:11.000000000 +0100 +++ new/tqdm-4.67.3/tqdm.egg-info/PKG-INFO 2026-02-03 18:35:32.000000000 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: tqdm -Version: 4.67.1 +Version: 4.67.3 Summary: Fast, Extensible Progress Meter Maintainer-email: tqdm developers <[email protected]> License: MPL-2.0 AND MIT @@ -22,8 +22,6 @@ Classifier: Intended Audience :: End Users/Desktop Classifier: Intended Audience :: Other Audience Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: MIT License -Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) Classifier: Operating System :: MacOS Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft @@ -43,6 +41,7 @@ Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation Classifier: Programming Language :: Python :: Implementation :: IronPython @@ -68,6 +67,7 @@ Description-Content-Type: text/x-rst License-File: LICENCE Requires-Dist: colorama; platform_system == "Windows" +Requires-Dist: importlib_metadata; python_version < "3.8" Provides-Extra: dev Requires-Dist: pytest>=6; extra == "dev" Requires-Dist: pytest-cov; extra == "dev" @@ -82,6 +82,7 @@ Requires-Dist: requests; extra == "telegram" Provides-Extra: notebook Requires-Dist: ipywidgets>=6; extra == "notebook" +Dynamic: license-file |Logo| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm.egg-info/SOURCES.txt new/tqdm-4.67.3/tqdm.egg-info/SOURCES.txt --- old/tqdm-4.67.1/tqdm.egg-info/SOURCES.txt 2024-11-24 21:12:11.000000000 +0100 +++ new/tqdm-4.67.3/tqdm.egg-info/SOURCES.txt 2026-02-03 18:35:32.000000000 +0100 @@ -46,7 +46,6 @@ tests/tests_version.py tqdm/__init__.py tqdm/__main__.py -tqdm/_dist_ver.py tqdm/_main.py tqdm/_monitor.py tqdm/_tqdm.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tqdm-4.67.1/tqdm.egg-info/requires.txt new/tqdm-4.67.3/tqdm.egg-info/requires.txt --- old/tqdm-4.67.1/tqdm.egg-info/requires.txt 2024-11-24 21:12:11.000000000 +0100 +++ new/tqdm-4.67.3/tqdm.egg-info/requires.txt 2026-02-03 18:35:32.000000000 +0100 @@ -2,6 +2,9 @@ [:platform_system == "Windows"] colorama +[:python_version < "3.8"] +importlib_metadata + [dev] pytest>=6 pytest-cov
