omlish 0.0.0.dev164__py3-none-any.whl → 0.0.0.dev166__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- omlish/.manifests.json +30 -2
- omlish/__about__.py +2 -2
- omlish/codecs/__init__.py +3 -0
- omlish/codecs/base.py +4 -0
- omlish/codecs/funcs.py +11 -0
- omlish/codecs/text.py +2 -2
- omlish/formats/cloudpickle.py +31 -0
- omlish/formats/json/codecs.py +0 -4
- omlish/formats/json/delimted.py +4 -0
- omlish/formats/yaml.py +7 -0
- omlish/funcs/pairs.py +0 -281
- omlish/io/compress/codecs.py +20 -0
- omlish/io/generators/__init__.py +3 -0
- omlish/io/generators/stepped.py +19 -3
- omlish/iterators/__init__.py +24 -0
- omlish/iterators/iterators.py +132 -0
- omlish/iterators/recipes.py +18 -0
- omlish/iterators/tools.py +96 -0
- omlish/iterators/unique.py +67 -0
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/RECORD +25 -19
- omlish/iterators.py +0 -300
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev164.dist-info → omlish-0.0.0.dev166.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
import collections
|
2
|
+
import typing as ta
|
3
|
+
|
4
|
+
|
5
|
+
T = ta.TypeVar('T')
|
6
|
+
|
7
|
+
|
8
|
+
_MISSING = object()
|
9
|
+
|
10
|
+
|
11
|
+
class PeekIterator(ta.Iterator[T]):
|
12
|
+
|
13
|
+
def __init__(self, it: ta.Iterable[T]) -> None:
|
14
|
+
super().__init__()
|
15
|
+
|
16
|
+
self._it = iter(it)
|
17
|
+
self._pos = -1
|
18
|
+
self._next_item: ta.Any = _MISSING
|
19
|
+
|
20
|
+
_item: T
|
21
|
+
|
22
|
+
def __iter__(self) -> ta.Self:
|
23
|
+
return self
|
24
|
+
|
25
|
+
@property
|
26
|
+
def done(self) -> bool:
|
27
|
+
try:
|
28
|
+
self.peek()
|
29
|
+
except StopIteration:
|
30
|
+
return True
|
31
|
+
else:
|
32
|
+
return False
|
33
|
+
|
34
|
+
def __next__(self) -> T:
|
35
|
+
if self._next_item is not _MISSING:
|
36
|
+
self._item = ta.cast(T, self._next_item)
|
37
|
+
self._next_item = _MISSING
|
38
|
+
else:
|
39
|
+
self._item = next(self._it)
|
40
|
+
self._pos += 1
|
41
|
+
return self._item
|
42
|
+
|
43
|
+
def peek(self) -> T:
|
44
|
+
if self._next_item is not _MISSING:
|
45
|
+
return ta.cast(T, self._next_item)
|
46
|
+
self._next_item = next(self._it)
|
47
|
+
return self._next_item
|
48
|
+
|
49
|
+
def next_peek(self) -> T:
|
50
|
+
next(self)
|
51
|
+
return self.peek()
|
52
|
+
|
53
|
+
def takewhile(self, fn: ta.Callable[[T], bool]) -> ta.Iterator[T]:
|
54
|
+
while fn(self.peek()):
|
55
|
+
yield next(self)
|
56
|
+
|
57
|
+
def skipwhile(self, fn: ta.Callable[[T], bool]) -> None:
|
58
|
+
while fn(self.peek()):
|
59
|
+
next(self)
|
60
|
+
|
61
|
+
def takeuntil(self, fn: ta.Callable[[T], bool]) -> ta.Iterator[T]:
|
62
|
+
return self.takewhile(lambda e: not fn(e))
|
63
|
+
|
64
|
+
def skipuntil(self, fn: ta.Callable[[T], bool]) -> None:
|
65
|
+
self.skipwhile(lambda e: not fn(e))
|
66
|
+
|
67
|
+
def takethrough(self, pos: int) -> ta.Iterator[T]:
|
68
|
+
return self.takewhile(lambda _: self._pos < pos)
|
69
|
+
|
70
|
+
def skipthrough(self, pos: int) -> None:
|
71
|
+
self.skipwhile(lambda _: self._pos < pos)
|
72
|
+
|
73
|
+
def taketo(self, pos: int) -> ta.Iterator[T]:
|
74
|
+
return self.takethrough(pos - 1)
|
75
|
+
|
76
|
+
def skipto(self, pos: int) -> None:
|
77
|
+
self.skipthrough(pos - 1)
|
78
|
+
|
79
|
+
|
80
|
+
class ProxyIterator(ta.Iterator[T]):
|
81
|
+
|
82
|
+
def __init__(self, fn: ta.Callable[[], T]) -> None:
|
83
|
+
self._fn = fn
|
84
|
+
|
85
|
+
def __iter__(self) -> ta.Self:
|
86
|
+
return self
|
87
|
+
|
88
|
+
def __next__(self) -> T:
|
89
|
+
return self._fn()
|
90
|
+
|
91
|
+
|
92
|
+
class PrefetchIterator(ta.Iterator[T]):
|
93
|
+
|
94
|
+
def __init__(self, fn: ta.Callable[[], T] | None = None) -> None:
|
95
|
+
super().__init__()
|
96
|
+
|
97
|
+
self._fn = fn
|
98
|
+
self._deque: collections.deque[T] = collections.deque()
|
99
|
+
|
100
|
+
def __iter__(self) -> ta.Self:
|
101
|
+
return self
|
102
|
+
|
103
|
+
def push(self, item) -> None:
|
104
|
+
self._deque.append(item)
|
105
|
+
|
106
|
+
def __next__(self) -> T:
|
107
|
+
try:
|
108
|
+
return self._deque.popleft()
|
109
|
+
except IndexError:
|
110
|
+
if self._fn is None:
|
111
|
+
raise StopIteration from None
|
112
|
+
return self._fn()
|
113
|
+
|
114
|
+
|
115
|
+
class RetainIterator(ta.Iterator[T]):
|
116
|
+
|
117
|
+
def __init__(self, fn: ta.Callable[[], T]) -> None:
|
118
|
+
super().__init__()
|
119
|
+
|
120
|
+
self._fn = fn
|
121
|
+
self._deque: collections.deque[T] = collections.deque()
|
122
|
+
|
123
|
+
def __iter__(self) -> ta.Self:
|
124
|
+
return self
|
125
|
+
|
126
|
+
def pop(self) -> None:
|
127
|
+
self._deque.popleft()
|
128
|
+
|
129
|
+
def __next__(self) -> T:
|
130
|
+
item = self._fn()
|
131
|
+
self._deque.append(item)
|
132
|
+
return item
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"""
|
2
|
+
https://docs.python.org/3/library/itertools.html#itertools-recipes
|
3
|
+
"""
|
4
|
+
import collections
|
5
|
+
import itertools
|
6
|
+
import typing as ta
|
7
|
+
|
8
|
+
|
9
|
+
T = ta.TypeVar('T')
|
10
|
+
|
11
|
+
|
12
|
+
def sliding_window(it: ta.Iterable[T], n: int) -> ta.Iterator[tuple[T, ...]]:
|
13
|
+
# sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG
|
14
|
+
iterator = iter(it)
|
15
|
+
window = collections.deque(itertools.islice(iterator, n - 1), maxlen=n)
|
16
|
+
for x in iterator:
|
17
|
+
window.append(x)
|
18
|
+
yield tuple(window)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
import functools
|
2
|
+
import heapq
|
3
|
+
import itertools
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
from .iterators import PeekIterator
|
7
|
+
from .iterators import PrefetchIterator
|
8
|
+
|
9
|
+
|
10
|
+
T = ta.TypeVar('T')
|
11
|
+
U = ta.TypeVar('U')
|
12
|
+
|
13
|
+
|
14
|
+
def unzip(it: ta.Iterable[T], width: int | None = None) -> list:
|
15
|
+
if width is None:
|
16
|
+
if not isinstance(it, PeekIterator):
|
17
|
+
it = PeekIterator(iter(it))
|
18
|
+
try:
|
19
|
+
width = len(it.peek())
|
20
|
+
except StopIteration:
|
21
|
+
return []
|
22
|
+
|
23
|
+
its: list[PrefetchIterator[T]] = []
|
24
|
+
running = True
|
25
|
+
|
26
|
+
def next_fn(idx):
|
27
|
+
nonlocal running
|
28
|
+
if not running:
|
29
|
+
raise StopIteration
|
30
|
+
try:
|
31
|
+
items = next(it) # type: ignore
|
32
|
+
except StopIteration:
|
33
|
+
running = False
|
34
|
+
raise
|
35
|
+
for item_idx, item in enumerate(items):
|
36
|
+
its[item_idx].push(item)
|
37
|
+
return next(its[idx])
|
38
|
+
|
39
|
+
its.extend(PrefetchIterator(functools.partial(next_fn, idx)) for idx in range(width))
|
40
|
+
return its
|
41
|
+
|
42
|
+
|
43
|
+
def take(n: int, iterable: ta.Iterable[T]) -> list[T]:
|
44
|
+
return list(itertools.islice(iterable, n))
|
45
|
+
|
46
|
+
|
47
|
+
def chunk(n: int, iterable: ta.Iterable[T], strict: bool = False) -> ta.Iterator[list[T]]:
|
48
|
+
iterator = iter(functools.partial(take, n, iter(iterable)), [])
|
49
|
+
if strict:
|
50
|
+
def ret():
|
51
|
+
for chunk in iterator:
|
52
|
+
if len(chunk) != n:
|
53
|
+
raise ValueError('iterable is not divisible by n.')
|
54
|
+
yield chunk
|
55
|
+
return iter(ret())
|
56
|
+
else:
|
57
|
+
return iterator
|
58
|
+
|
59
|
+
|
60
|
+
def merge_on(
|
61
|
+
function: ta.Callable[[T], U],
|
62
|
+
*its: ta.Iterable[T],
|
63
|
+
) -> ta.Iterator[tuple[U, list[tuple[int, T]]]]:
|
64
|
+
indexed_its = [
|
65
|
+
(
|
66
|
+
(function(item), it_idx, item)
|
67
|
+
for it_idx, item in zip(itertools.repeat(it_idx), it)
|
68
|
+
)
|
69
|
+
for it_idx, it in enumerate(its)
|
70
|
+
]
|
71
|
+
|
72
|
+
grouped_indexed_its = itertools.groupby(
|
73
|
+
heapq.merge(*indexed_its),
|
74
|
+
key=lambda item_tuple: item_tuple[0],
|
75
|
+
)
|
76
|
+
|
77
|
+
return (
|
78
|
+
(fn_item, [(it_idx, item) for _, it_idx, item in grp])
|
79
|
+
for fn_item, grp in grouped_indexed_its
|
80
|
+
)
|
81
|
+
|
82
|
+
|
83
|
+
def expand_indexed_pairs(
|
84
|
+
seq: ta.Iterable[tuple[int, T]],
|
85
|
+
default: T,
|
86
|
+
*,
|
87
|
+
width: int | None = None,
|
88
|
+
) -> list[T]:
|
89
|
+
width_ = width
|
90
|
+
if width_ is None:
|
91
|
+
width_ = (max(idx for idx, _ in seq) + 1) if seq else 0
|
92
|
+
result = [default] * width_
|
93
|
+
for idx, value in seq:
|
94
|
+
if idx < width_:
|
95
|
+
result[idx] = value
|
96
|
+
return result
|
@@ -0,0 +1,67 @@
|
|
1
|
+
import dataclasses as dc
|
2
|
+
import typing as ta
|
3
|
+
|
4
|
+
from .. import lang
|
5
|
+
|
6
|
+
|
7
|
+
T = ta.TypeVar('T')
|
8
|
+
|
9
|
+
|
10
|
+
@dc.dataclass()
|
11
|
+
class UniqueStats:
|
12
|
+
key: ta.Any
|
13
|
+
num_seen: int
|
14
|
+
first_idx: int
|
15
|
+
last_idx: int
|
16
|
+
|
17
|
+
|
18
|
+
@dc.dataclass(frozen=True)
|
19
|
+
class UniqueItem(ta.Generic[T]):
|
20
|
+
idx: int
|
21
|
+
item: T
|
22
|
+
stats: UniqueStats
|
23
|
+
out: lang.Maybe[T]
|
24
|
+
|
25
|
+
|
26
|
+
class UniqueIterator(ta.Iterator[UniqueItem[T]]):
|
27
|
+
def __init__(
|
28
|
+
self,
|
29
|
+
it: ta.Iterable[T],
|
30
|
+
keyer: ta.Callable[[T], ta.Any] = lang.identity,
|
31
|
+
) -> None:
|
32
|
+
super().__init__()
|
33
|
+
self._it = enumerate(it)
|
34
|
+
self._keyer = keyer
|
35
|
+
|
36
|
+
self.stats: dict[ta.Any, UniqueStats] = {}
|
37
|
+
|
38
|
+
def __next__(self) -> UniqueItem[T]:
|
39
|
+
idx, item = next(self._it)
|
40
|
+
key = self._keyer(item)
|
41
|
+
|
42
|
+
try:
|
43
|
+
stats = self.stats[key]
|
44
|
+
|
45
|
+
except KeyError:
|
46
|
+
stats = self.stats[key] = UniqueStats(
|
47
|
+
key,
|
48
|
+
num_seen=1,
|
49
|
+
first_idx=idx,
|
50
|
+
last_idx=idx,
|
51
|
+
)
|
52
|
+
return UniqueItem(
|
53
|
+
idx,
|
54
|
+
item,
|
55
|
+
stats,
|
56
|
+
lang.just(item),
|
57
|
+
)
|
58
|
+
|
59
|
+
else:
|
60
|
+
stats.num_seen += 1
|
61
|
+
stats.last_idx = idx
|
62
|
+
return UniqueItem(
|
63
|
+
idx,
|
64
|
+
item,
|
65
|
+
stats,
|
66
|
+
lang.empty(),
|
67
|
+
)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
omlish/.manifests.json,sha256=
|
2
|
-
omlish/__about__.py,sha256=
|
1
|
+
omlish/.manifests.json,sha256=0BnQGD2dcXEma0Jop2ZesvDNzSj3CAJBNq8aTGuBz9A,7276
|
2
|
+
omlish/__about__.py,sha256=fXaHA2dVpft8O6khsmrd4euInIFrrMexrl8b4pMj_ME,3409
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
|
5
5
|
omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
|
@@ -7,7 +7,6 @@ omlish/check.py,sha256=RzMJhp8_dDnpHXnPiHDyZTW13KGDTopeuMgpwKCowPs,1988
|
|
7
7
|
omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
|
8
8
|
omlish/defs.py,sha256=9uUjJuVIbCBL3g14fyzAp-9gH935MFofvlfOGwcBIaM,4913
|
9
9
|
omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
10
|
-
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
11
10
|
omlish/libc.py,sha256=8r7Ejyhttk9ruCfBkxNTrlzir5WPbDE2vmY7VPlceMA,15362
|
12
11
|
omlish/multiprocessing.py,sha256=QZT4C7I-uThCAjaEY3xgUYb-5GagUlnE4etN01LDyU4,5186
|
13
12
|
omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
|
@@ -109,14 +108,14 @@ omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1
|
|
109
108
|
omlish/bootstrap/main.py,sha256=yZhOHDDlj4xB5a89dRdT8z58FsqqnpoBg1-tvY2CJe4,5903
|
110
109
|
omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
|
111
110
|
omlish/bootstrap/sys.py,sha256=aqMzxZa_lPj78cgz4guYZAkjT6En32e2LptfEo20NIM,8769
|
112
|
-
omlish/codecs/__init__.py,sha256
|
113
|
-
omlish/codecs/base.py,sha256=
|
111
|
+
omlish/codecs/__init__.py,sha256=-FDwRJFGagg-fZyQ8wup4GPuR6gHpmaChzthlykn-kY,876
|
112
|
+
omlish/codecs/base.py,sha256=O6MDkBg0LDq3W-bVXpNEZiIkTYQo2cwaHFoUwxgtcOk,2208
|
114
113
|
omlish/codecs/bytes.py,sha256=jlZ87OmZ52HhQDNyL87R3OIviK2qV5iU2jZYOTOLWjk,2157
|
115
114
|
omlish/codecs/chain.py,sha256=DrBi5vbaFfObfoppo6alwOmyW2XbrH2051cjExwr2Gs,527
|
116
|
-
omlish/codecs/funcs.py,sha256=
|
115
|
+
omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
|
117
116
|
omlish/codecs/registry.py,sha256=8ySUG-kwGJoUN1HCRnz8VjcykB0wlIzoWF5WTAE1ny0,3860
|
118
117
|
omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
|
119
|
-
omlish/codecs/text.py,sha256=
|
118
|
+
omlish/codecs/text.py,sha256=8inuZbi_ODJB4G6eZfj2wBvCLgtpvhcTebKdGSori5c,5728
|
120
119
|
omlish/collections/__init__.py,sha256=zeUvcAz073ekko37QKya6sElTMfKTuF1bKrdbMtaRpI,2142
|
121
120
|
omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
122
121
|
omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
|
@@ -204,6 +203,7 @@ omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,70
|
|
204
203
|
omlish/docker/timebomb.py,sha256=A_pgIDaXKsQwPiikrCTgIJl91gwYqkPGFY6j-Naq07Q,342
|
205
204
|
omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
206
205
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
206
|
+
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
207
207
|
omlish/formats/codecs.py,sha256=6AbKIz_gl_om36-7qsutybYzK8cJP3LzwC9YJlwCPOA,1590
|
208
208
|
omlish/formats/dotenv.py,sha256=qoDG4Ayu7B-8LjBBhcmNiLZW0_9LgCi3Ri2aPo9DEQ8,19314
|
209
209
|
omlish/formats/json5.py,sha256=odpZIShlUpv19aACWe58SoMPcv0AHKIa6zSMjlKgaMI,515
|
@@ -211,10 +211,11 @@ omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
|
|
211
211
|
omlish/formats/props.py,sha256=cek3JLFLIrpE76gvs8rs_B8yF4SpY8ooDH8apWsquwE,18953
|
212
212
|
omlish/formats/toml.py,sha256=AhpVNAy87eBohBCsvIvwH2ucASWxnWXMEsMH8zB7rpI,340
|
213
213
|
omlish/formats/xml.py,sha256=ggiOwSERt4d9XmZwLZiDIh5qnFJS4jdmow9m9_9USps,1491
|
214
|
-
omlish/formats/yaml.py,sha256=
|
214
|
+
omlish/formats/yaml.py,sha256=ffOwGnLA6chdiFyaS7X0TBMGmHG9AoGudzKVWfQ1UOs,7389
|
215
215
|
omlish/formats/json/__init__.py,sha256=y7T-Jm-7FuQFzb-6uedky0ZhBaKtCKzcu291juXfiWI,669
|
216
|
-
omlish/formats/json/codecs.py,sha256=
|
216
|
+
omlish/formats/json/codecs.py,sha256=E5KErfqsgGZq763ixXLT3qysbk5MIsypT92xG5aSaIs,796
|
217
217
|
omlish/formats/json/consts.py,sha256=A0cTAGGLyjo-gcYIQrL4JIaardI0yPMhQoNmh42BaRg,387
|
218
|
+
omlish/formats/json/delimted.py,sha256=UpcTP-KAc6HgMtb9n-Ldgux18OlZjb_9BDFTWol2vo8,29
|
218
219
|
omlish/formats/json/encoding.py,sha256=O4iIWle7W_-RwpOvJNlqOfkbnDyiQHexV5Za4hlrFzw,497
|
219
220
|
omlish/formats/json/json.py,sha256=Mdqv2vdMi7gp96eV0BIYH5UdWpjWfsh-tSMZeywG-08,331
|
220
221
|
omlish/formats/json/literals.py,sha256=6ptwZyfTXodEtAjDnUhsx6XU3KRZWWYWKYtZ8T7rzsQ,5625
|
@@ -236,7 +237,7 @@ omlish/formats/json/stream/render.py,sha256=NtmDsN92xZi5dkgSSuMeMXMAiJblmjz1arB4
|
|
236
237
|
omlish/funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
237
238
|
omlish/funcs/genmachine.py,sha256=EY2k-IFNKMEmHo9CmGRptFvhEMZVOWzZhn0wdQGeaFM,2476
|
238
239
|
omlish/funcs/match.py,sha256=gMLZn1enNiFvQaWrQubY300M1BrmdKWzeePihBS7Ywc,6153
|
239
|
-
omlish/funcs/pairs.py,sha256=
|
240
|
+
omlish/funcs/pairs.py,sha256=VCkZjDmJGtR76BsejsHNfb4TcpHCtkkmak-zWDFchAo,3904
|
240
241
|
omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
|
241
242
|
omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
242
243
|
omlish/graphs/dags.py,sha256=zp55lYgUdRCxmADwiGDHeehMJczZFA_tzdWqy77icOk,3047
|
@@ -309,7 +310,7 @@ omlish/io/compress/adapters.py,sha256=DQvbiqTiaVE-GsawpOpUTX07Gjg125Iuwd6IhjuSax
|
|
309
310
|
omlish/io/compress/base.py,sha256=yx8ifzs_j8y66gMCQcssjZ936NNBFhYn_kBRwNh3SWQ,647
|
310
311
|
omlish/io/compress/brotli.py,sha256=Q2t9uRqBEgRyJCSPsTaJv5w7d-rhsjDMluA4VRBHa_A,1182
|
311
312
|
omlish/io/compress/bz2.py,sha256=2ULaZwcpAkHKV-JargrLoXgL9G-gxrVnPqE_pGqNUrg,1566
|
312
|
-
omlish/io/compress/codecs.py,sha256=
|
313
|
+
omlish/io/compress/codecs.py,sha256=ySLHZdNKLx_CiBW9aGIu0gHbALGzF-uyH0usloU7s-8,1820
|
313
314
|
omlish/io/compress/gzip.py,sha256=ZKZdg0wg_nIgFdkfemOv8xZpHneBXZAiCH0n6gIibWY,12281
|
314
315
|
omlish/io/compress/lz4.py,sha256=4kppXZCXpSAQw6wJvCs9LLHFzukekENja7RiwmN8uMc,2790
|
315
316
|
omlish/io/compress/lzma.py,sha256=4bWNKk7uTFiRT_HogW2ZldgaNy1IukmqfVDVkf5M2Ok,2501
|
@@ -321,11 +322,16 @@ omlish/io/fdio/handlers.py,sha256=OOQhiazbhNMwxLwyzf8KUQrBQSuHIm-UqAMpXmmHGFQ,13
|
|
321
322
|
omlish/io/fdio/kqueue.py,sha256=YgGBQibkAUYODYDiGl7Enjtx1oQsJXuDsBLBXgqlLQw,3832
|
322
323
|
omlish/io/fdio/manager.py,sha256=q4wWf7nKrNtjx6yPEvrVnFt4UtK_BTvVlquEGw7poEo,1250
|
323
324
|
omlish/io/fdio/pollers.py,sha256=yNadAt3W5wd90PFmd3vD77bq5QwoVb2A6SM2JjZpKRs,5507
|
324
|
-
omlish/io/generators/__init__.py,sha256=
|
325
|
+
omlish/io/generators/__init__.py,sha256=YsSLJY9uw72eX3iXd_A0pM69g7EvEqMFdCdR_BBD4RA,1216
|
325
326
|
omlish/io/generators/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC0,33
|
326
327
|
omlish/io/generators/direct.py,sha256=A9VJB1rNKU3l-NatpYIwyCLI3R_ybGglmdx6sAtoTo4,324
|
327
328
|
omlish/io/generators/readers.py,sha256=MolTFCzcnD5XoP0su0YUNHJ0xlHC3KTihvWAi75y8Bo,4336
|
328
|
-
omlish/io/generators/stepped.py,sha256=
|
329
|
+
omlish/io/generators/stepped.py,sha256=sl-3-hNVYi7qGYZjwBPHs0hKxmz7XkfDMosCXbhIYlE,5025
|
330
|
+
omlish/iterators/__init__.py,sha256=yMavf5FofiS1EU4UFuWPXiFZ03W0H-y7MuMxW8FUaEE,358
|
331
|
+
omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU,3158
|
332
|
+
omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
|
333
|
+
omlish/iterators/tools.py,sha256=SvXyyQJh7aceLYhRl6pQB-rfSaXw5IMIWukeEeOZt-0,2492
|
334
|
+
omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
|
329
335
|
omlish/lang/__init__.py,sha256=wMfsQjBFNsZ_Y4352iEr0DlEnNebf26JmR4ETtDsQow,3948
|
330
336
|
omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
|
331
337
|
omlish/lang/clsdct.py,sha256=AjtIWLlx2E6D5rC97zQ3Lwq2SOMkbg08pdO_AxpzEHI,1744
|
@@ -550,9 +556,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
|
|
550
556
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
551
557
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
552
558
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
553
|
-
omlish-0.0.0.
|
554
|
-
omlish-0.0.0.
|
555
|
-
omlish-0.0.0.
|
556
|
-
omlish-0.0.0.
|
557
|
-
omlish-0.0.0.
|
558
|
-
omlish-0.0.0.
|
559
|
+
omlish-0.0.0.dev166.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
560
|
+
omlish-0.0.0.dev166.dist-info/METADATA,sha256=k2XolFifVQc4PpG7_98r62S2OP6NpxBerLqcXtxl-tg,4264
|
561
|
+
omlish-0.0.0.dev166.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
562
|
+
omlish-0.0.0.dev166.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
563
|
+
omlish-0.0.0.dev166.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
564
|
+
omlish-0.0.0.dev166.dist-info/RECORD,,
|