mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-14 17:22:56 -07:00
Bump tempora from 5.1.0 to 5.2.1 (#1977)
* Bump tempora from 5.1.0 to 5.2.1 Bumps [tempora](https://github.com/jaraco/tempora) from 5.1.0 to 5.2.1. - [Release notes](https://github.com/jaraco/tempora/releases) - [Changelog](https://github.com/jaraco/tempora/blob/main/CHANGES.rst) - [Commits](https://github.com/jaraco/tempora/compare/v5.1.0...v5.2.1) --- updated-dependencies: - dependency-name: tempora dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update tempora==5.2.1 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> [skip ci]
This commit is contained in:
parent
2fda916331
commit
6b1b6d0f32
10 changed files with 367 additions and 403 deletions
|
@ -68,6 +68,7 @@ __all__ = [
|
|||
'exactly_n',
|
||||
'filter_except',
|
||||
'first',
|
||||
'gray_product',
|
||||
'groupby_transform',
|
||||
'ichunked',
|
||||
'iequals',
|
||||
|
@ -658,6 +659,7 @@ def distinct_permutations(iterable, r=None):
|
|||
[(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]
|
||||
|
||||
"""
|
||||
|
||||
# Algorithm: https://w.wiki/Qai
|
||||
def _full(A):
|
||||
while True:
|
||||
|
@ -1301,7 +1303,7 @@ def split_at(iterable, pred, maxsplit=-1, keep_separator=False):
|
|||
[[0], [2], [4, 5, 6, 7, 8, 9]]
|
||||
|
||||
By default, the delimiting items are not included in the output.
|
||||
The include them, set *keep_separator* to ``True``.
|
||||
To include them, set *keep_separator* to ``True``.
|
||||
|
||||
>>> list(split_at('abcdcba', lambda x: x == 'b', keep_separator=True))
|
||||
[['a'], ['b'], ['c', 'd', 'c'], ['b'], ['a']]
|
||||
|
@ -1391,7 +1393,9 @@ def split_after(iterable, pred, maxsplit=-1):
|
|||
if pred(item) and buf:
|
||||
yield buf
|
||||
if maxsplit == 1:
|
||||
yield list(it)
|
||||
buf = list(it)
|
||||
if buf:
|
||||
yield buf
|
||||
return
|
||||
buf = []
|
||||
maxsplit -= 1
|
||||
|
@ -2914,6 +2918,7 @@ def make_decorator(wrapping_func, result_index=0):
|
|||
'7'
|
||||
|
||||
"""
|
||||
|
||||
# See https://sites.google.com/site/bbayles/index/decorator_factory for
|
||||
# notes on how this works.
|
||||
def decorator(*wrapping_args, **wrapping_kwargs):
|
||||
|
@ -3464,7 +3469,6 @@ def _sample_unweighted(iterable, k):
|
|||
next_index = k + floor(log(random()) / log(1 - W))
|
||||
|
||||
for index, element in enumerate(iterable, k):
|
||||
|
||||
if index == next_index:
|
||||
reservoir[randrange(k)] = element
|
||||
# The new W is the largest in a sample of k U(0, `old_W`) numbers
|
||||
|
@ -4284,7 +4288,6 @@ def minmax(iterable_or_value, *others, key=None, default=_marker):
|
|||
lo_key = hi_key = key(lo)
|
||||
|
||||
for x, y in zip_longest(it, it, fillvalue=lo):
|
||||
|
||||
x_key, y_key = key(x), key(y)
|
||||
|
||||
if y_key < x_key:
|
||||
|
@ -4345,3 +4348,45 @@ def constrained_batches(
|
|||
|
||||
if batch:
|
||||
yield tuple(batch)
|
||||
|
||||
|
||||
def gray_product(*iterables):
|
||||
"""Like :func:`itertools.product`, but return tuples in an order such
|
||||
that only one element in the generated tuple changes from one iteration
|
||||
to the next.
|
||||
|
||||
>>> list(gray_product('AB','CD'))
|
||||
[('A', 'C'), ('B', 'C'), ('B', 'D'), ('A', 'D')]
|
||||
|
||||
This function consumes all of the input iterables before producing output.
|
||||
If any of the input iterables have fewer than two items, ``ValueError``
|
||||
is raised.
|
||||
|
||||
For information on the algorithm, see
|
||||
`this section <https://www-cs-faculty.stanford.edu/~knuth/fasc2a.ps.gz>`__
|
||||
of Donald Knuth's *The Art of Computer Programming*.
|
||||
"""
|
||||
all_iterables = tuple(tuple(x) for x in iterables)
|
||||
iterable_count = len(all_iterables)
|
||||
for iterable in all_iterables:
|
||||
if len(iterable) < 2:
|
||||
raise ValueError("each iterable must have two or more items")
|
||||
|
||||
# This is based on "Algorithm H" from section 7.2.1.1, page 20.
|
||||
# a holds the indexes of the source iterables for the n-tuple to be yielded
|
||||
# f is the array of "focus pointers"
|
||||
# o is the array of "directions"
|
||||
a = [0] * iterable_count
|
||||
f = list(range(iterable_count + 1))
|
||||
o = [1] * iterable_count
|
||||
while True:
|
||||
yield tuple(all_iterables[i][a[i]] for i in range(iterable_count))
|
||||
j = f[0]
|
||||
f[0] = 0
|
||||
if j == iterable_count:
|
||||
break
|
||||
a[j] = a[j] + o[j]
|
||||
if a[j] == 0 or a[j] == len(all_iterables[j]) - 1:
|
||||
o[j] = -o[j]
|
||||
f[j] = f[j + 1]
|
||||
f[j + 1] = j + 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue