relib 1.2.10__py3-none-any.whl → 1.2.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
relib/utils.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import re
2
2
  from itertools import chain
3
- from typing import Any, Callable, Iterable, overload
3
+ from typing import Any, Callable, Iterable, Literal, overload
4
4
 
5
5
  __all__ = [
6
6
  "noop",
@@ -84,12 +84,9 @@ def dict_firsts[T, K](pairs: Iterable[tuple[K, T]]) -> dict[K, T]:
84
84
  def distinct_by[T](pairs: Iterable[tuple[object, T]]) -> list[T]:
85
85
  return list(dict_firsts(pairs).values())
86
86
 
87
- def sort_by[T](pairs: Iterable[tuple[object, T]]) -> list[T]:
88
- pair_list: list[Any] = list(pairs)
89
- pair_list.sort(key=lambda p: p[0])
90
- for i in range(len(pair_list)):
91
- pair_list[i] = pair_list[i][1]
92
- return pair_list
87
+ def sort_by[T](pairs: Iterable[tuple[Any, T]]) -> list[T]:
88
+ pairs = sorted(pairs, key=lambda p: p[0])
89
+ return [v for _, v in pairs]
93
90
 
94
91
  def first[T](iterable: Iterable[T]) -> T | None:
95
92
  return next(iter(iterable), None)
@@ -161,10 +158,36 @@ def dict_by[T, K](keys: Iterable[K], values: Iterable[T]) -> dict[K, T]:
161
158
  def tuple_by[T, K](d: dict[K, T], keys: Iterable[K]) -> tuple[T, ...]:
162
159
  return tuple(d[key] for key in keys)
163
160
 
164
- def flatten[T](iterable: Iterable[Iterable[T]]) -> list[T]:
165
- return list(chain.from_iterable(iterable))
161
+ @overload
162
+ def flatten[T](iterable: Iterable[T], depth: Literal[0]) -> list[T]: ...
163
+ @overload
164
+ def flatten[T](iterable: Iterable[Iterable[T]], depth: Literal[1] = 1) -> list[T]: ...
165
+ @overload
166
+ def flatten[T](iterable: Iterable[Iterable[Iterable[T]]], depth: Literal[2]) -> list[T]: ...
167
+ @overload
168
+ def flatten[T](iterable: Iterable[Iterable[Iterable[Iterable[T]]]], depth: Literal[3]) -> list[T]: ...
169
+ @overload
170
+ def flatten[T](iterable: Iterable[Iterable[Iterable[Iterable[Iterable[T]]]]], depth: Literal[4]) -> list[T]: ...
171
+ @overload
172
+ def flatten(iterable: Iterable, depth: int) -> list: ...
173
+
174
+ def flatten(iterable: Iterable, depth: int = 1) -> list:
175
+ for _ in range(depth):
176
+ iterable = chain.from_iterable(iterable)
177
+ return list(iterable)
178
+
179
+ @overload
180
+ def transpose[T1, T2](tuples: Iterable[tuple[T1, T2]], default_num_returns: int = 0) -> tuple[list[T1], list[T2]]: ...
181
+ @overload
182
+ def transpose[T1, T2, T3](tuples: Iterable[tuple[T1, T2, T3]], default_num_returns: int = 0) -> tuple[list[T1], list[T2], list[T3]]: ...
183
+ @overload
184
+ def transpose[T1, T2, T3, T4](tuples: Iterable[tuple[T1, T2, T3, T4]], default_num_returns: int = 0) -> tuple[list[T1], list[T2], list[T3], list[T4]]: ...
185
+ @overload
186
+ def transpose[T1, T2, T3, T4, T5](tuples: Iterable[tuple[T1, T2, T3, T4, T5]], default_num_returns: int = 0) -> tuple[list[T1], list[T2], list[T3], list[T4], list[T5]]: ...
187
+ @overload
188
+ def transpose(tuples: Iterable[tuple], default_num_returns: int = 0) -> tuple[list, ...]: ...
166
189
 
167
- def transpose(tuples, default_num_returns=0):
190
+ def transpose(tuples: Iterable[tuple], default_num_returns=0) -> tuple[list, ...]:
168
191
  output = tuple(zip(*tuples))
169
192
  if not output:
170
193
  return ([],) * default_num_returns
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relib
3
- Version: 1.2.10
3
+ Version: 1.2.11
4
4
  Project-URL: Repository, https://github.com/Reddan/relib.git
5
5
  Author: Hampus Hallman
6
6
  License: Copyright 2018-2025 Hampus Hallman
@@ -2,8 +2,8 @@ relib/__init__.py,sha256=4_nmex7mRhCwdtLF8k0XLbxxPs-UeN2sP-EEImm5JGs,126
2
2
  relib/hashing.py,sha256=DB_fnkj0ls01FgZbf4nPFHl4EBU8X_0OrmDvty4HlRE,6020
3
3
  relib/measure_duration.py,sha256=LCTo_D_qReNprD3fhtJ0daeWycS6xQE_cwxeg2_h0xo,456
4
4
  relib/system.py,sha256=3RWmSweTCQtB1wzsgpUqcAsMo6TIhVRq2oSt28Ul_1E,2733
5
- relib/utils.py,sha256=A6GenRxjzI-1R80QD3G8Xq-E72LezIbItuHeBSaYnHg,8362
6
- relib-1.2.10.dist-info/METADATA,sha256=q2wmDYkUk7f_D3WxRQloVtqjOpI6_Z3h5AFt9qXFEto,1296
7
- relib-1.2.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
- relib-1.2.10.dist-info/licenses/LICENSE,sha256=9xVsdtv_-uSyY9Xl9yujwAPm4-mjcCLeVy-ljwXEWbo,1059
9
- relib-1.2.10.dist-info/RECORD,,
5
+ relib/utils.py,sha256=bwOJXfsNx5nZf1fZxWtT_hLwjTbWo2cP9qfsqca1aHI,9680
6
+ relib-1.2.11.dist-info/METADATA,sha256=WxEfPUA2Ox2t1ulJZFIXX5ynIOf1jw1u6iWbvtcx9HI,1296
7
+ relib-1.2.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
+ relib-1.2.11.dist-info/licenses/LICENSE,sha256=9xVsdtv_-uSyY9Xl9yujwAPm4-mjcCLeVy-ljwXEWbo,1059
9
+ relib-1.2.11.dist-info/RECORD,,
File without changes