Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-funcy for openSUSE:Factory checked in at 2022-09-29 18:13:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-funcy (Old) and /work/SRC/openSUSE:Factory/.python-funcy.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-funcy" Thu Sep 29 18:13:51 2022 rev:9 rq:1006874 version:1.17 Changes: -------- --- /work/SRC/openSUSE:Factory/python-funcy/python-funcy.changes 2021-09-06 15:58:25.905289643 +0200 +++ /work/SRC/openSUSE:Factory/.python-funcy.new.2275/python-funcy.changes 2022-09-29 18:14:53.115434575 +0200 @@ -1,0 +2,12 @@ +Wed Sep 28 19:41:40 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to 1.17 + - added del_in() + - made throttle() and limit_error_rate() work on methods + - added str and repr to Call objects + - migrated CI to Github actions (thx to Bruno Alla) + - fixed doc[string] for zip_dicts (Tal Einat) + - fixed some inspect issues + - minor doc fixes + +------------------------------------------------------------------- Old: ---- funcy-1.16.tar.gz New: ---- funcy-1.17.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-funcy.spec ++++++ --- /var/tmp/diff_new_pack.o0YC0p/_old 2022-09-29 18:14:53.635435594 +0200 +++ /var/tmp/diff_new_pack.o0YC0p/_new 2022-09-29 18:14:53.639435602 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-funcy # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-funcy -Version: 1.16 +Version: 1.17 Release: 0 Summary: Functional tools for Python License: BSD-3-Clause ++++++ funcy-1.16.tar.gz -> funcy-1.17.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/CHANGELOG new/funcy-1.17/CHANGELOG --- old/funcy-1.16/CHANGELOG 2021-05-10 07:38:06.000000000 +0200 +++ new/funcy-1.17/CHANGELOG 2021-12-20 06:20:43.000000000 +0100 @@ -1,3 +1,12 @@ +1.17 +- added del_in() +- made throttle() and limit_error_rate() work on methods +- added str and repr to Call objects +- migrated CI to Github actions (thx to Bruno Alla) +- fixed doc[string] for zip_dicts (Tal Einat) +- fixed some inspect issues +- minor doc fixes + 1.16 - support Python 3.9 officially - unify @memoize() and @cache(): both have .skip/.memory/.invalidate/.invalidate_all now diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/PKG-INFO new/funcy-1.17/PKG-INFO --- old/funcy-1.16/PKG-INFO 2021-05-10 09:17:36.870961700 +0200 +++ new/funcy-1.17/PKG-INFO 2021-12-20 06:33:10.963257800 +0100 @@ -1,211 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: funcy -Version: 1.16 +Version: 1.17 Summary: A fancy and practical functional tools Home-page: http://github.com/Suor/funcy Author: Alexander Schepanovski Author-email: suor....@gmail.com License: BSD -Description: Funcy - ===== - - |Gitter| - - A collection of fancy functional tools focused on practicality. - - Inspired by clojure, underscore and my own abstractions. Keep reading to get an overview - or `read the docs <http://funcy.readthedocs.org/>`_. - Or jump directly to `cheatsheet <http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_. - - Works with Python 2.7, 3.4+ and pypy. - - - Installation - ------------- - - :: - - pip install funcy - - - Overview - -------------- - - Import stuff from funcy to make things happen: - - .. code:: python - - from funcy import whatever, you, need - - - Merge collections of same type - (works for dicts, sets, lists, tuples, iterators and even strings): - - .. code:: python - - merge(coll1, coll2, coll3, ...) - join(colls) - merge_with(sum, dict1, dict2, ...) - - - Walk through collection, creating its transform (like map but preserves type): - - .. code:: python - - walk(str.upper, {'a', 'b'}) # {'A', 'B'} - walk(reversed, {'a': 1, 'b': 2}) # {1: 'a', 2: 'b'} - walk_keys(double, {'a': 1, 'b': 2}) # {'aa': 1, 'bb': 2} - walk_values(inc, {'a': 1, 'b': 2}) # {'a': 2, 'b': 3} - - - Select a part of collection: - - .. code:: python - - select(even, {1,2,3,10,20}) # {2,10,20} - select(r'^a', ('a','b','ab','ba')) # ('a','ab') - select_keys(callable, {str: '', None: None}) # {str: ''} - compact({2, None, 1, 0}) # {1,2} - - - Manipulate sequences: - - .. code:: python - - take(4, iterate(double, 1)) # [1, 2, 4, 8] - first(drop(3, count(10))) # 13 - - lremove(even, [1, 2, 3]) # [1, 3] - lconcat([1, 2], [5, 6]) # [1, 2, 5, 6] - lcat(map(range, range(4))) # [0, 0, 1, 0, 1, 2] - lmapcat(range, range(4)) # same - flatten(nested_structure) # flat iter - distinct('abacbdd') # iter('abcd') - - lsplit(odd, range(5)) # ([1, 3], [0, 2, 4]) - lsplit_at(2, range(5)) # ([0, 1], [2, 3, 4]) - group_by(mod3, range(5)) # {0: [0, 3], 1: [1, 4], 2: [2]} - - lpartition(2, range(5)) # [[0, 1], [2, 3]] - chunks(2, range(5)) # iter: [0, 1], [2, 3], [4] - pairwise(range(5)) # iter: [0, 1], [1, 2], ... - - - And functions: - - .. code:: python - - partial(add, 1) # inc - curry(add)(1)(2) # 3 - compose(inc, double)(10) # 21 - complement(even) # odd - all_fn(isa(int), even) # is_even_int - - one_third = rpartial(operator.div, 3.0) - has_suffix = rcurry(str.endswith) - - - Create decorators easily: - - .. code:: python - - @decorator - def log(call): - print call._func.__name__, call._args - return call() - - - Abstract control flow: - - .. code:: python - - walk_values(silent(int), {'a': '1', 'b': 'no'}) - # => {'a': 1, 'b': None} - - @once - def initialize(): - "..." - - with suppress(OSError): - os.remove('some.file') - - @ignore(ErrorRateExceeded) - @limit_error_rate(fails=5, timeout=60) - @retry(tries=2, errors=(HttpError, ServiceDown)) - def some_unreliable_action(...): - "..." - - class MyUser(AbstractBaseUser): - @cached_property - def public_phones(self): - return self.phones.filter(public=True) - - - Ease debugging: - - .. code:: python - - squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]} - # x: 3 - # x^2: 9 - # ... - - @print_exits - def some_func(...): - "..." - - @log_calls(log.info, errors=False) - @log_errors(log.exception) - def some_suspicious_function(...): - "..." - - with print_durations('Creating models'): - Model.objects.create(...) - # ... - # 10.2 ms in Creating models - - - And `much more <http://funcy.readthedocs.org/>`_. - - - Dive in - ------- - - Funcy is an embodiment of ideas I explain in several essays: - - - `Why Every Language Needs Its Underscore <http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_ - - `Functional Python Made Easy <http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_ - - `Abstracting Control Flow <http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_ - - `Painless Decorators <http://hackflow.com/blog/2013/11/03/painless-decorators/>`_ - - - Running tests - -------------- - - To run the tests using your default python: - - :: - - pip install -r test_requirements.txt - py.test - - To fully run ``tox`` you need all the supported pythons to be installed. These are - 2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in absense - of all of the above:: - - tox -e py27 - tox -e py36 - tox -e lint - - - .. |Build Status| image:: https://travis-ci.org/Suor/funcy.svg?branch=master - :target: https://travis-ci.org/Suor/funcy - - - .. |Gitter| image:: https://badges.gitter.im/JoinChat.svg - :alt: Join the chat at https://gitter.im/Suor/funcy - :target: https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: License :: OSI Approved :: BSD License @@ -220,7 +20,205 @@ Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Intended Audience :: Developers +Description-Content-Type: text/x-rst +License-File: LICENSE + +Funcy +===== + +A collection of fancy functional tools focused on practicality. + +Inspired by clojure, underscore and my own abstractions. Keep reading to get an overview +or `read the docs <http://funcy.readthedocs.org/>`_. +Or jump directly to `cheatsheet <http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_. + +Works with Python 2.7, 3.4+ and pypy. + + +Installation +------------- + +:: + + pip install funcy + + +Overview +-------------- + +Import stuff from funcy to make things happen: + +.. code:: python + + from funcy import whatever, you, need + + +Merge collections of same type +(works for dicts, sets, lists, tuples, iterators and even strings): + +.. code:: python + + merge(coll1, coll2, coll3, ...) + join(colls) + merge_with(sum, dict1, dict2, ...) + + +Walk through collection, creating its transform (like map but preserves type): + +.. code:: python + + walk(str.upper, {'a', 'b'}) # {'A', 'B'} + walk(reversed, {'a': 1, 'b': 2}) # {1: 'a', 2: 'b'} + walk_keys(double, {'a': 1, 'b': 2}) # {'aa': 1, 'bb': 2} + walk_values(inc, {'a': 1, 'b': 2}) # {'a': 2, 'b': 3} + + +Select a part of collection: + +.. code:: python + + select(even, {1,2,3,10,20}) # {2,10,20} + select(r'^a', ('a','b','ab','ba')) # ('a','ab') + select_keys(callable, {str: '', None: None}) # {str: ''} + compact({2, None, 1, 0}) # {1,2} + + +Manipulate sequences: + +.. code:: python + + take(4, iterate(double, 1)) # [1, 2, 4, 8] + first(drop(3, count(10))) # 13 + + lremove(even, [1, 2, 3]) # [1, 3] + lconcat([1, 2], [5, 6]) # [1, 2, 5, 6] + lcat(map(range, range(4))) # [0, 0, 1, 0, 1, 2] + lmapcat(range, range(4)) # same + flatten(nested_structure) # flat iter + distinct('abacbdd') # iter('abcd') + + lsplit(odd, range(5)) # ([1, 3], [0, 2, 4]) + lsplit_at(2, range(5)) # ([0, 1], [2, 3, 4]) + group_by(mod3, range(5)) # {0: [0, 3], 1: [1, 4], 2: [2]} + + lpartition(2, range(5)) # [[0, 1], [2, 3]] + chunks(2, range(5)) # iter: [0, 1], [2, 3], [4] + pairwise(range(5)) # iter: [0, 1], [1, 2], ... + + +And functions: + +.. code:: python + + partial(add, 1) # inc + curry(add)(1)(2) # 3 + compose(inc, double)(10) # 21 + complement(even) # odd + all_fn(isa(int), even) # is_even_int + + one_third = rpartial(operator.div, 3.0) + has_suffix = rcurry(str.endswith, 2) + + +Create decorators easily: + +.. code:: python + + @decorator + def log(call): + print call._func.__name__, call._args + return call() + + +Abstract control flow: + +.. code:: python + + walk_values(silent(int), {'a': '1', 'b': 'no'}) + # => {'a': 1, 'b': None} + + @once + def initialize(): + "..." + + with suppress(OSError): + os.remove('some.file') + + @ignore(ErrorRateExceeded) + @limit_error_rate(fails=5, timeout=60) + @retry(tries=2, errors=(HttpError, ServiceDown)) + def some_unreliable_action(...): + "..." + + class MyUser(AbstractBaseUser): + @cached_property + def public_phones(self): + return self.phones.filter(public=True) + + +Ease debugging: + +.. code:: python + + squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]} + # x: 3 + # x^2: 9 + # ... + + @print_exits + def some_func(...): + "..." + + @log_calls(log.info, errors=False) + @log_errors(log.exception) + def some_suspicious_function(...): + "..." + + with print_durations('Creating models'): + Model.objects.create(...) + # ... + # 10.2 ms in Creating models + + +And `much more <http://funcy.readthedocs.org/>`_. + + +Dive in +------- + +Funcy is an embodiment of ideas I explain in several essays: + +- `Why Every Language Needs Its Underscore <http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_ +- `Functional Python Made Easy <http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_ +- `Abstracting Control Flow <http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_ +- `Painless Decorators <http://hackflow.com/blog/2013/11/03/painless-decorators/>`_ + + +Running tests +-------------- + +To run the tests using your default python: + +:: + + pip install -r test_requirements.txt + py.test + +To fully run ``tox`` you need all the supported pythons to be installed. These are +2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in absense +of all of the above:: + + tox -e py27 + tox -e py36 + tox -e lint + + +.. |Build Status| image:: https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg + :target: https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/README.rst new/funcy-1.17/README.rst --- old/funcy-1.16/README.rst 2019-11-16 20:17:14.000000000 +0100 +++ new/funcy-1.17/README.rst 2021-11-11 11:29:12.000000000 +0100 @@ -1,4 +1,4 @@ -Funcy |Build Status| |Gitter| +Funcy |Build Status| ===== A collection of fancy functional tools focused on practicality. @@ -92,7 +92,7 @@ all_fn(isa(int), even) # is_even_int one_third = rpartial(operator.div, 3.0) - has_suffix = rcurry(str.endswith) + has_suffix = rcurry(str.endswith, 2) Create decorators easily: @@ -188,10 +188,5 @@ tox -e lint -.. |Build Status| image:: https://travis-ci.org/Suor/funcy.svg?branch=master - :target: https://travis-ci.org/Suor/funcy - - -.. |Gitter| image:: https://badges.gitter.im/JoinChat.svg - :alt: Join the chat at https://gitter.im/Suor/funcy - :target: https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge +.. |Build Status| image:: https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg + :target: https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/VERSION new/funcy-1.17/VERSION --- old/funcy-1.16/VERSION 2021-05-10 07:38:09.000000000 +0200 +++ new/funcy-1.17/VERSION 2021-12-20 06:20:46.000000000 +0100 @@ -1 +1 @@ -1.16 +1.17 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy/_inspect.py new/funcy-1.17/funcy/_inspect.py --- old/funcy-1.16/funcy/_inspect.py 2021-05-08 11:10:10.000000000 +0200 +++ new/funcy-1.17/funcy/_inspect.py 2021-11-11 10:25:47.000000000 +0100 @@ -1,5 +1,9 @@ from __future__ import absolute_import from inspect import CO_VARARGS, CO_VARKEYWORDS +try: + from inspect import signature +except ImportError: + signature = None # from collections import namedtuple import types import re @@ -105,7 +109,7 @@ except (KeyError, TypeError): pass - mod = func.__module__ + mod = getattr(func, '__module__', None) if mod in STD_MODULES or mod in ARGS and func.__name__ in ARGS[mod]: _spec = ARGS[mod].get(func.__name__, '*') required, _, optional = _spec.partition('-') @@ -144,5 +148,28 @@ max_n = req_n + 1 if func.__code__.co_flags & CO_VARARGS else n return Spec(max_n=max_n, names=names, req_n=req_n, req_names=req_names, kw=kw) except AttributeError: - raise ValueError('Unable to introspect %s() arguments' - % getattr(func, '__name__', func)) + # We use signature last to be fully backwards compatible. Also it's slower + try: + sig = signature(func) + except (ValueError, TypeError): + raise ValueError('Unable to introspect %s() arguments' + % (getattr(func, '__qualname__', None) or getattr(func, '__name__', func))) + else: + spec = _cache[func] = _sig_to_spec(sig) + return spec + + +def _sig_to_spec(sig): + max_n, names, req_n, req_names, kw = 0, set(), 0, set(), False + for name, param in sig.parameters.items(): + max_n += 1 + if param.kind == param.VAR_KEYWORD: + kw = True + elif param.kind == param.VAR_POSITIONAL: + req_n += 1 + else: + names.add(name) + if param.default is param.empty: + req_n += 1 + req_names.add(name) + return Spec(max_n=max_n, names=names, req_n=req_n, req_names=req_names, kw=kw) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy/colls.py new/funcy-1.17/funcy/colls.py --- old/funcy-1.16/funcy/colls.py 2021-03-21 06:53:51.000000000 +0100 +++ new/funcy-1.17/funcy/colls.py 2021-10-11 17:27:26.000000000 +0200 @@ -2,6 +2,7 @@ from __builtin__ import all as _all, any as _any except ImportError: from builtins import all as _all, any as _any +from copy import copy from operator import itemgetter, methodcaller, attrgetter from itertools import chain, tee from collections import defaultdict @@ -19,7 +20,7 @@ 'is_distinct', 'all', 'any', 'none', 'one', 'some', 'zipdict', 'flip', 'project', 'omit', 'zip_values', 'zip_dicts', 'where', 'pluck', 'pluck_attr', 'invoke', 'lwhere', 'lpluck', 'lpluck_attr', 'linvoke', - 'get_in', 'set_in', 'update_in', 'has_path'] + 'get_in', 'set_in', 'update_in', 'del_in', 'has_path'] ### Generic ops @@ -251,16 +252,16 @@ def zip_values(*dicts): """Yields tuples of corresponding values of several dicts.""" if len(dicts) < 1: - raise TypeError('izip_values expects at least one argument') + raise TypeError('zip_values expects at least one argument') keys = set.intersection(*map(set, dicts)) for key in keys: yield tuple(d[key] for d in dicts) def zip_dicts(*dicts): - """Yields tuples like (key, val1, val2, ...) + """Yields tuples like (key, (val1, val2, ...)) for each common key in all given dicts.""" if len(dicts) < 1: - raise TypeError('izip_dicts expects at least one argument') + raise TypeError('zip_dicts expects at least one argument') keys = set.intersection(*map(set, dicts)) for key in keys: yield key, tuple(d[key] for d in dicts) @@ -293,6 +294,24 @@ copy[path[0]] = update_in(copy.get(path[0], current_default), path[1:], update, default) return copy + +def del_in(coll, path): + """Creates a copy of coll with a nested key or index deleted.""" + if not path: + return coll + try: + next_coll = coll[path[0]] + except (KeyError, IndexError): + return coll + + coll_copy = copy(coll) + if len(path) == 1: + del coll_copy[path[0]] + else: + coll_copy[path[0]] = del_in(next_coll, path[1:]) + return coll_copy + + def has_path(coll, path): """Checks if path exists in the given nested collection.""" for p in path: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy/decorators.py new/funcy-1.17/funcy/decorators.py --- old/funcy-1.16/funcy/decorators.py 2021-05-08 07:56:40.000000000 +0200 +++ new/funcy-1.17/funcy/decorators.py 2021-07-17 13:18:37.000000000 +0200 @@ -74,6 +74,14 @@ except TypeError as e: raise AttributeError(*e.args) + def __str__(self): + func = getattr(self._func, '__qualname__', str(self._func)) + args = ", ".join(list(map(str, self._args)) + ["%s=%s" % t for t in self._kwargs.items()]) + return "%s(%s)" % (func, args) + + def __repr__(self): + return "<Call %s>" % self + if PY2: def has_single_arg(func): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy/flow.py new/funcy-1.17/funcy/flow.py --- old/funcy-1.16/funcy/flow.py 2021-05-09 04:59:09.000000000 +0200 +++ new/funcy-1.17/funcy/flow.py 2021-07-17 13:06:57.000000000 +0200 @@ -169,27 +169,27 @@ timeout = timedelta(seconds=timeout) def decorator(func): - func.fails = 0 - func.blocked = None - @wraps(func) def wrapper(*args, **kwargs): - if func.blocked: - if datetime.now() - func.blocked < timeout: + if wrapper.blocked: + if datetime.now() - wrapper.blocked < timeout: raise exception else: - func.blocked = None + wrapper.blocked = None try: result = func(*args, **kwargs) except: # noqa - func.fails += 1 - if func.fails >= fails: - func.blocked = datetime.now() + wrapper.fails += 1 + if wrapper.fails >= fails: + wrapper.blocked = datetime.now() raise else: - func.fails = 0 + wrapper.fails = 0 return result + + wrapper.fails = 0 + wrapper.blocked = None return wrapper return decorator @@ -200,17 +200,17 @@ period = period.total_seconds() def decorator(func): - func.blocked_until = None @wraps(func) def wrapper(*args, **kwargs): now = time.time() - if func.blocked_until and func.blocked_until > now: + if wrapper.blocked_until and wrapper.blocked_until > now: return - func.blocked_until = now + period + wrapper.blocked_until = now + period return func(*args, **kwargs) + wrapper.blocked_until = None return wrapper return decorator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy.egg-info/PKG-INFO new/funcy-1.17/funcy.egg-info/PKG-INFO --- old/funcy-1.16/funcy.egg-info/PKG-INFO 2021-05-10 09:17:36.000000000 +0200 +++ new/funcy-1.17/funcy.egg-info/PKG-INFO 2021-12-20 06:33:10.000000000 +0100 @@ -1,211 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: funcy -Version: 1.16 +Version: 1.17 Summary: A fancy and practical functional tools Home-page: http://github.com/Suor/funcy Author: Alexander Schepanovski Author-email: suor....@gmail.com License: BSD -Description: Funcy - ===== - - |Gitter| - - A collection of fancy functional tools focused on practicality. - - Inspired by clojure, underscore and my own abstractions. Keep reading to get an overview - or `read the docs <http://funcy.readthedocs.org/>`_. - Or jump directly to `cheatsheet <http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_. - - Works with Python 2.7, 3.4+ and pypy. - - - Installation - ------------- - - :: - - pip install funcy - - - Overview - -------------- - - Import stuff from funcy to make things happen: - - .. code:: python - - from funcy import whatever, you, need - - - Merge collections of same type - (works for dicts, sets, lists, tuples, iterators and even strings): - - .. code:: python - - merge(coll1, coll2, coll3, ...) - join(colls) - merge_with(sum, dict1, dict2, ...) - - - Walk through collection, creating its transform (like map but preserves type): - - .. code:: python - - walk(str.upper, {'a', 'b'}) # {'A', 'B'} - walk(reversed, {'a': 1, 'b': 2}) # {1: 'a', 2: 'b'} - walk_keys(double, {'a': 1, 'b': 2}) # {'aa': 1, 'bb': 2} - walk_values(inc, {'a': 1, 'b': 2}) # {'a': 2, 'b': 3} - - - Select a part of collection: - - .. code:: python - - select(even, {1,2,3,10,20}) # {2,10,20} - select(r'^a', ('a','b','ab','ba')) # ('a','ab') - select_keys(callable, {str: '', None: None}) # {str: ''} - compact({2, None, 1, 0}) # {1,2} - - - Manipulate sequences: - - .. code:: python - - take(4, iterate(double, 1)) # [1, 2, 4, 8] - first(drop(3, count(10))) # 13 - - lremove(even, [1, 2, 3]) # [1, 3] - lconcat([1, 2], [5, 6]) # [1, 2, 5, 6] - lcat(map(range, range(4))) # [0, 0, 1, 0, 1, 2] - lmapcat(range, range(4)) # same - flatten(nested_structure) # flat iter - distinct('abacbdd') # iter('abcd') - - lsplit(odd, range(5)) # ([1, 3], [0, 2, 4]) - lsplit_at(2, range(5)) # ([0, 1], [2, 3, 4]) - group_by(mod3, range(5)) # {0: [0, 3], 1: [1, 4], 2: [2]} - - lpartition(2, range(5)) # [[0, 1], [2, 3]] - chunks(2, range(5)) # iter: [0, 1], [2, 3], [4] - pairwise(range(5)) # iter: [0, 1], [1, 2], ... - - - And functions: - - .. code:: python - - partial(add, 1) # inc - curry(add)(1)(2) # 3 - compose(inc, double)(10) # 21 - complement(even) # odd - all_fn(isa(int), even) # is_even_int - - one_third = rpartial(operator.div, 3.0) - has_suffix = rcurry(str.endswith) - - - Create decorators easily: - - .. code:: python - - @decorator - def log(call): - print call._func.__name__, call._args - return call() - - - Abstract control flow: - - .. code:: python - - walk_values(silent(int), {'a': '1', 'b': 'no'}) - # => {'a': 1, 'b': None} - - @once - def initialize(): - "..." - - with suppress(OSError): - os.remove('some.file') - - @ignore(ErrorRateExceeded) - @limit_error_rate(fails=5, timeout=60) - @retry(tries=2, errors=(HttpError, ServiceDown)) - def some_unreliable_action(...): - "..." - - class MyUser(AbstractBaseUser): - @cached_property - def public_phones(self): - return self.phones.filter(public=True) - - - Ease debugging: - - .. code:: python - - squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]} - # x: 3 - # x^2: 9 - # ... - - @print_exits - def some_func(...): - "..." - - @log_calls(log.info, errors=False) - @log_errors(log.exception) - def some_suspicious_function(...): - "..." - - with print_durations('Creating models'): - Model.objects.create(...) - # ... - # 10.2 ms in Creating models - - - And `much more <http://funcy.readthedocs.org/>`_. - - - Dive in - ------- - - Funcy is an embodiment of ideas I explain in several essays: - - - `Why Every Language Needs Its Underscore <http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_ - - `Functional Python Made Easy <http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_ - - `Abstracting Control Flow <http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_ - - `Painless Decorators <http://hackflow.com/blog/2013/11/03/painless-decorators/>`_ - - - Running tests - -------------- - - To run the tests using your default python: - - :: - - pip install -r test_requirements.txt - py.test - - To fully run ``tox`` you need all the supported pythons to be installed. These are - 2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in absense - of all of the above:: - - tox -e py27 - tox -e py36 - tox -e lint - - - .. |Build Status| image:: https://travis-ci.org/Suor/funcy.svg?branch=master - :target: https://travis-ci.org/Suor/funcy - - - .. |Gitter| image:: https://badges.gitter.im/JoinChat.svg - :alt: Join the chat at https://gitter.im/Suor/funcy - :target: https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: License :: OSI Approved :: BSD License @@ -220,7 +20,205 @@ Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Intended Audience :: Developers +Description-Content-Type: text/x-rst +License-File: LICENSE + +Funcy +===== + +A collection of fancy functional tools focused on practicality. + +Inspired by clojure, underscore and my own abstractions. Keep reading to get an overview +or `read the docs <http://funcy.readthedocs.org/>`_. +Or jump directly to `cheatsheet <http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_. + +Works with Python 2.7, 3.4+ and pypy. + + +Installation +------------- + +:: + + pip install funcy + + +Overview +-------------- + +Import stuff from funcy to make things happen: + +.. code:: python + + from funcy import whatever, you, need + + +Merge collections of same type +(works for dicts, sets, lists, tuples, iterators and even strings): + +.. code:: python + + merge(coll1, coll2, coll3, ...) + join(colls) + merge_with(sum, dict1, dict2, ...) + + +Walk through collection, creating its transform (like map but preserves type): + +.. code:: python + + walk(str.upper, {'a', 'b'}) # {'A', 'B'} + walk(reversed, {'a': 1, 'b': 2}) # {1: 'a', 2: 'b'} + walk_keys(double, {'a': 1, 'b': 2}) # {'aa': 1, 'bb': 2} + walk_values(inc, {'a': 1, 'b': 2}) # {'a': 2, 'b': 3} + + +Select a part of collection: + +.. code:: python + + select(even, {1,2,3,10,20}) # {2,10,20} + select(r'^a', ('a','b','ab','ba')) # ('a','ab') + select_keys(callable, {str: '', None: None}) # {str: ''} + compact({2, None, 1, 0}) # {1,2} + + +Manipulate sequences: + +.. code:: python + + take(4, iterate(double, 1)) # [1, 2, 4, 8] + first(drop(3, count(10))) # 13 + + lremove(even, [1, 2, 3]) # [1, 3] + lconcat([1, 2], [5, 6]) # [1, 2, 5, 6] + lcat(map(range, range(4))) # [0, 0, 1, 0, 1, 2] + lmapcat(range, range(4)) # same + flatten(nested_structure) # flat iter + distinct('abacbdd') # iter('abcd') + + lsplit(odd, range(5)) # ([1, 3], [0, 2, 4]) + lsplit_at(2, range(5)) # ([0, 1], [2, 3, 4]) + group_by(mod3, range(5)) # {0: [0, 3], 1: [1, 4], 2: [2]} + + lpartition(2, range(5)) # [[0, 1], [2, 3]] + chunks(2, range(5)) # iter: [0, 1], [2, 3], [4] + pairwise(range(5)) # iter: [0, 1], [1, 2], ... + + +And functions: + +.. code:: python + + partial(add, 1) # inc + curry(add)(1)(2) # 3 + compose(inc, double)(10) # 21 + complement(even) # odd + all_fn(isa(int), even) # is_even_int + + one_third = rpartial(operator.div, 3.0) + has_suffix = rcurry(str.endswith, 2) + + +Create decorators easily: + +.. code:: python + + @decorator + def log(call): + print call._func.__name__, call._args + return call() + + +Abstract control flow: + +.. code:: python + + walk_values(silent(int), {'a': '1', 'b': 'no'}) + # => {'a': 1, 'b': None} + + @once + def initialize(): + "..." + + with suppress(OSError): + os.remove('some.file') + + @ignore(ErrorRateExceeded) + @limit_error_rate(fails=5, timeout=60) + @retry(tries=2, errors=(HttpError, ServiceDown)) + def some_unreliable_action(...): + "..." + + class MyUser(AbstractBaseUser): + @cached_property + def public_phones(self): + return self.phones.filter(public=True) + + +Ease debugging: + +.. code:: python + + squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]} + # x: 3 + # x^2: 9 + # ... + + @print_exits + def some_func(...): + "..." + + @log_calls(log.info, errors=False) + @log_errors(log.exception) + def some_suspicious_function(...): + "..." + + with print_durations('Creating models'): + Model.objects.create(...) + # ... + # 10.2 ms in Creating models + + +And `much more <http://funcy.readthedocs.org/>`_. + + +Dive in +------- + +Funcy is an embodiment of ideas I explain in several essays: + +- `Why Every Language Needs Its Underscore <http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_ +- `Functional Python Made Easy <http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_ +- `Abstracting Control Flow <http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_ +- `Painless Decorators <http://hackflow.com/blog/2013/11/03/painless-decorators/>`_ + + +Running tests +-------------- + +To run the tests using your default python: + +:: + + pip install -r test_requirements.txt + py.test + +To fully run ``tox`` you need all the supported pythons to be installed. These are +2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in absense +of all of the above:: + + tox -e py27 + tox -e py36 + tox -e lint + + +.. |Build Status| image:: https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg + :target: https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/funcy.egg-info/SOURCES.txt new/funcy-1.17/funcy.egg-info/SOURCES.txt --- old/funcy-1.16/funcy.egg-info/SOURCES.txt 2021-05-10 09:17:36.000000000 +0200 +++ new/funcy-1.17/funcy.egg-info/SOURCES.txt 2021-12-20 06:33:10.000000000 +0100 @@ -29,7 +29,6 @@ funcy.egg-info/dependency_links.txt funcy.egg-info/top_level.txt tests/__init__.py -tests/__init__.pyc tests/test_calc.py tests/test_colls.py tests/test_debug.py @@ -44,134 +43,18 @@ tests/test_strings.py tests/test_tree.py tests/test_types.py -tests/__pycache__/__init__.cpython-35.pyc -tests/__pycache__/__init__.cpython-36.pyc -tests/__pycache__/__init__.cpython-37.pyc -tests/__pycache__/__init__.cpython-38.pyc -tests/__pycache__/__init__.pypy-41.pyc -tests/__pycache__/test_calc.cpython-27-PYTEST.pyc -tests/__pycache__/test_calc.cpython-35-PYTEST.pyc -tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_calc.cpython-36-PYTEST.pyc -tests/__pycache__/test_calc.cpython-37-PYTEST.pyc -tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_calc.pypy-41-PYTEST.pyc -tests/__pycache__/test_colls.cpython-27-PYTEST.pyc -tests/__pycache__/test_colls.cpython-35-PYTEST.pyc -tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_colls.cpython-36-PYTEST.pyc -tests/__pycache__/test_colls.cpython-37-PYTEST.pyc -tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_colls.pypy-41-PYTEST.pyc -tests/__pycache__/test_debug.cpython-27-PYTEST.pyc -tests/__pycache__/test_debug.cpython-35-PYTEST.pyc -tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_debug.cpython-36-PYTEST.pyc -tests/__pycache__/test_debug.cpython-37-PYTEST.pyc -tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_debug.pypy-41-PYTEST.pyc -tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc -tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc -tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc -tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc -tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc -tests/__pycache__/test_flow.cpython-27-PYTEST.pyc -tests/__pycache__/test_flow.cpython-35-PYTEST.pyc -tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_flow.cpython-36-PYTEST.pyc -tests/__pycache__/test_flow.cpython-37-PYTEST.pyc -tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_flow.pypy-41-PYTEST.pyc -tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc -tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc -tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc -tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc -tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc -tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc -tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc -tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc -tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc -tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc -tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc -tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc -tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc -tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc -tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc -tests/__pycache__/test_interface.cpython-27-PYTEST.pyc -tests/__pycache__/test_interface.cpython-35-PYTEST.pyc -tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_interface.cpython-36-PYTEST.pyc -tests/__pycache__/test_interface.cpython-37-PYTEST.pyc -tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_interface.pypy-41-PYTEST.pyc -tests/__pycache__/test_objects.cpython-27-PYTEST.pyc -tests/__pycache__/test_objects.cpython-35-PYTEST.pyc -tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_objects.cpython-36-PYTEST.pyc -tests/__pycache__/test_objects.cpython-37-PYTEST.pyc -tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_objects.pypy-41-PYTEST.pyc -tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc -tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc -tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc -tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc -tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc -tests/__pycache__/test_strings.cpython-27-PYTEST.pyc -tests/__pycache__/test_strings.cpython-35-PYTEST.pyc -tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_strings.cpython-36-PYTEST.pyc -tests/__pycache__/test_strings.cpython-37-PYTEST.pyc -tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_strings.pypy-41-PYTEST.pyc -tests/__pycache__/test_tree.cpython-27-PYTEST.pyc -tests/__pycache__/test_tree.cpython-35-PYTEST.pyc -tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_tree.cpython-36-PYTEST.pyc -tests/__pycache__/test_tree.cpython-37-PYTEST.pyc -tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_tree.pypy-41-PYTEST.pyc -tests/__pycache__/test_types.cpython-27-PYTEST.pyc -tests/__pycache__/test_types.cpython-35-PYTEST.pyc -tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc -tests/__pycache__/test_types.cpython-36-PYTEST.pyc -tests/__pycache__/test_types.cpython-37-PYTEST.pyc -tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc -tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc -tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc -tests/__pycache__/test_types.pypy-41-PYTEST.pyc \ No newline at end of file +tests/__pycache__/__init__.cpython-39.pyc +tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc +tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/setup.py new/funcy-1.17/setup.py --- old/funcy-1.16/setup.py 2021-05-07 13:22:59.000000000 +0200 +++ new/funcy-1.17/setup.py 2021-12-20 06:31:39.000000000 +0100 @@ -3,9 +3,7 @@ # Remove build status and move Gitter link under title for PyPi README = open('README.rst').read() \ - .replace('|Build Status|', '', 1) \ - .replace('|Gitter|', '', 1) \ - .replace('===\n', '===\n\n|Gitter|\n') + .replace('|Build Status|', '', 1) setup( @@ -16,6 +14,7 @@ description='A fancy and practical functional tools', long_description=README, + long_description_content_type="text/x-rst", url='http://github.com/Suor/funcy', license='BSD', @@ -35,6 +34,7 @@ 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', Binary files old/funcy-1.16/tests/__init__.pyc and new/funcy-1.17/tests/__init__.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-35.pyc and new/funcy-1.17/tests/__pycache__/__init__.cpython-35.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-36.pyc and new/funcy-1.17/tests/__pycache__/__init__.cpython-36.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-37.pyc and new/funcy-1.17/tests/__pycache__/__init__.cpython-37.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-38.pyc and new/funcy-1.17/tests/__pycache__/__init__.cpython-38.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-39.pyc and new/funcy-1.17/tests/__pycache__/__init__.cpython-39.pyc differ Binary files old/funcy-1.16/tests/__pycache__/__init__.pypy-41.pyc and new/funcy-1.17/tests/__pycache__/__init__.pypy-41.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_calc.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_calc.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_colls.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_colls.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_debug.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_debug.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_flow.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_flow.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_interface.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_interface.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_objects.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_objects.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_strings.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_strings.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_tree.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_tree.pypy-41-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-27-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-27-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-35-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-35-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-36-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-36-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-37-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-37-PYTEST.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc and new/funcy-1.17/tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc differ Binary files old/funcy-1.16/tests/__pycache__/test_types.pypy-41-PYTEST.pyc and new/funcy-1.17/tests/__pycache__/test_types.pypy-41-PYTEST.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/tests/test_colls.py new/funcy-1.17/tests/test_colls.py --- old/funcy-1.16/tests/test_colls.py 2021-03-21 07:01:39.000000000 +0100 +++ new/funcy-1.17/tests/test_colls.py 2021-09-04 10:23:15.000000000 +0200 @@ -240,7 +240,6 @@ assert get_in(d, ["a", "b"]) == "c" assert get_in(d, ["a", "f", "g"]) == "h" - def test_get_in_list(): assert get_in([1, 2], [0]) == 1 assert get_in([1, 2], [3]) is None @@ -263,14 +262,12 @@ assert d3['e'] == {'f': 42} assert d3['a'] is d['a'] - def test_set_in_list(): l = [{}, 1] l2 = set_in(l, [1], 7) assert l2 == [{}, 7] assert l2[0] is l[0] - def test_update_in(): d = {'c': []} @@ -280,6 +277,14 @@ assert d2['a']['b'] == 1 assert d2['c'] is d['c'] +def test_del_in(): + d = {'c': [1, 2, 3]} + + assert del_in(d, []) is d + assert del_in(d, ['a', 'b']) is d + assert del_in(d, ['c', 1]) == {'c': [1, 3]} + with pytest.raises(TypeError): del_in(d, ['c', 'b']) + def test_has_path(): d = { "a": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/tests/test_decorators.py new/funcy-1.17/tests/test_decorators.py --- old/funcy-1.16/tests/test_decorators.py 2021-05-08 07:58:29.000000000 +0200 +++ new/funcy-1.17/tests/test_decorators.py 2021-05-10 15:54:30.000000000 +0200 @@ -31,13 +31,13 @@ def add(call, **kwargs): # TODO: use real kw-only args in Python 3 return call() + kwargs.get("n", 1) - def ten(): + def ten(a, b): return 10 # Should work with or without parentheses - assert add(n=2)(ten)() == 12 - assert add()(ten)() == 11 - assert add(ten)() == 11 + assert add(n=2)(ten)(1, 2) == 12 + assert add()(ten)(1, 2) == 11 + assert add(ten)(1, 2) == 11 def test_decorator_access_arg(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/tests/test_flow.py new/funcy-1.17/tests/test_flow.py --- old/funcy-1.16/tests/test_flow.py 2021-05-09 05:03:27.000000000 +0200 +++ new/funcy-1.17/tests/test_flow.py 2021-07-17 13:04:02.000000000 +0200 @@ -172,6 +172,15 @@ assert calls == [1, 3] +def test_throttle_class(): + class A: + def foo(self): + return 42 + + a = A() + assert throttle(1)(a.foo)() == 42 + + def test_post_processing(): @post_processing(max) def my_max(l): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/funcy-1.16/tests/test_funcs.py new/funcy-1.17/tests/test_funcs.py --- old/funcy-1.16/tests/test_funcs.py 2021-05-08 10:33:58.000000000 +0200 +++ new/funcy-1.17/tests/test_funcs.py 2021-11-11 10:28:40.000000000 +0100 @@ -28,7 +28,7 @@ assert A().f() == 11 -def test_back_partial(): +def test_rpartial(): assert rpartial(__sub__, 10)(1) == -9 assert rpartial(pow, 2, 85)(10) == 15 @@ -53,6 +53,7 @@ def test_rcurry(): assert rcurry(__sub__, 2)(10)(1) == -9 assert rcurry(lambda x,y,z: x+y+z)('a')('b')('c') == 'cba' + assert rcurry(str.endswith, 2)('c')('abc') is True def test_autocurry(): at = autocurry(lambda a, b, c: (a, b, c)) @@ -97,6 +98,8 @@ assert autocurry(complex)(imag=1)(0) == 1j assert autocurry(map)(_ + 1)([1, 2]) == [2, 3] assert autocurry(int)(base=12)('100') == 144 + # Only works in newer Pythons, relies on inspect.signature() + # assert autocurry(str.split)(sep='_')('a_1') == ['a', '1'] def test_autocurry_hard(): def required_star(f, *seqs):