omlish 0.0.0.dev97__py3-none-any.whl → 0.0.0.dev99__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- omlish/__about__.py +4 -4
- omlish/cached.py +11 -0
- omlish/collections/__init__.py +7 -0
- omlish/collections/hasheq.py +155 -0
- omlish/fnpairs.py +8 -10
- omlish/lang/__init__.py +1 -0
- omlish/lang/classes/__init__.py +1 -0
- omlish/lang/classes/abstract.py +13 -0
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/METADATA +5 -5
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/RECORD +14 -13
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev97.dist-info → omlish-0.0.0.dev99.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev99'
|
2
|
+
__revision__ = '68bd172d5acce0086e88d20a01fe294fc1fc390c'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -47,7 +47,7 @@ class Project(ProjectBase):
|
|
47
47
|
|
48
48
|
'python-snappy ~= 0.7',
|
49
49
|
|
50
|
-
'
|
50
|
+
'zstandard ~= 0.23',
|
51
51
|
],
|
52
52
|
|
53
53
|
'diag': [
|
@@ -67,7 +67,7 @@ class Project(ProjectBase):
|
|
67
67
|
|
68
68
|
'cbor2 ~= 5.6',
|
69
69
|
|
70
|
-
'cloudpickle ~= 3.
|
70
|
+
'cloudpickle ~= 3.1',
|
71
71
|
],
|
72
72
|
|
73
73
|
'http': [
|
omlish/cached.py
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
"""
|
2
|
+
This module solely exists for import convenience - tools will tend to resolve the imported 'property' as if it were from
|
3
|
+
builtins and thus not distinguish it from a normal property.
|
4
|
+
|
5
|
+
from omlish import cached
|
6
|
+
|
7
|
+
class C:
|
8
|
+
@cached.property
|
9
|
+
def p(self) -> str: ...
|
10
|
+
|
11
|
+
"""
|
1
12
|
from .lang.cached import _CachedProperty # noqa
|
2
13
|
from .lang.cached import cached_function
|
3
14
|
|
omlish/collections/__init__.py
CHANGED
@@ -0,0 +1,155 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- order preserving / linked list?
|
4
|
+
- ItemsView
|
5
|
+
"""
|
6
|
+
import abc
|
7
|
+
import dataclasses as dc
|
8
|
+
import typing as ta
|
9
|
+
|
10
|
+
from .. import lang
|
11
|
+
from .mappings import yield_dict_init
|
12
|
+
|
13
|
+
|
14
|
+
K = ta.TypeVar('K')
|
15
|
+
V = ta.TypeVar('V')
|
16
|
+
K2 = ta.TypeVar('K2')
|
17
|
+
V2 = ta.TypeVar('V2')
|
18
|
+
|
19
|
+
|
20
|
+
class HashEq(lang.Abstract, ta.Generic[K]):
|
21
|
+
@abc.abstractmethod
|
22
|
+
def hash(self, k: K) -> int:
|
23
|
+
raise NotImplementedError
|
24
|
+
|
25
|
+
@abc.abstractmethod
|
26
|
+
def eq(self, l: K, r: K) -> bool:
|
27
|
+
raise NotImplementedError
|
28
|
+
|
29
|
+
|
30
|
+
@lang.unabstract_class([
|
31
|
+
('hash', '_hash'),
|
32
|
+
('eq', '_eq'),
|
33
|
+
])
|
34
|
+
@dc.dataclass(frozen=True)
|
35
|
+
class HashEq_(ta.Generic[K]): # noqa
|
36
|
+
hash: ta.Callable[[K], int]
|
37
|
+
eq: ta.Callable[[K, K], bool]
|
38
|
+
|
39
|
+
def _hash(self, k: K) -> int:
|
40
|
+
return self.hash(k)
|
41
|
+
|
42
|
+
def _eq(self, l: K, r: K) -> bool:
|
43
|
+
return self.eq(l, r)
|
44
|
+
|
45
|
+
|
46
|
+
class hash_eq(HashEq[K], lang.NotInstantiable, lang.Final): # noqa
|
47
|
+
"""Workaround for PEP 695 support."""
|
48
|
+
|
49
|
+
def __new__( # type: ignore[misc]
|
50
|
+
cls,
|
51
|
+
hash: ta.Callable[[K], int], # noqa
|
52
|
+
eq: ta.Callable[[K, K], bool],
|
53
|
+
) -> HashEq[K]:
|
54
|
+
return HashEq_(hash, eq) # type: ignore
|
55
|
+
|
56
|
+
def hash(self, k: K) -> int:
|
57
|
+
raise TypeError
|
58
|
+
|
59
|
+
def eq(self, l: K, r: K) -> bool:
|
60
|
+
raise TypeError
|
61
|
+
|
62
|
+
|
63
|
+
class HashEqMap(ta.Mapping[K, V]):
|
64
|
+
class _Node(ta.NamedTuple, ta.Generic[K2, V2]):
|
65
|
+
k: K2
|
66
|
+
v: V2
|
67
|
+
h: int
|
68
|
+
|
69
|
+
def __init__(self, hash_eq: HashEq[K], *args: ta.Any, **kwargs: ta.Any) -> None:
|
70
|
+
super().__init__()
|
71
|
+
|
72
|
+
self._hash_eq = hash_eq
|
73
|
+
self._dct: dict[int, list[HashEqMap._Node[K, V]]] = {}
|
74
|
+
self._len = 0
|
75
|
+
|
76
|
+
for k, v in yield_dict_init(*args, **kwargs):
|
77
|
+
self[k] = v
|
78
|
+
|
79
|
+
def __len__(self) -> int:
|
80
|
+
return self._len
|
81
|
+
|
82
|
+
def __contains__(self, k: K) -> bool: # type: ignore[override]
|
83
|
+
h = self._hash_eq.hash(k)
|
84
|
+
try:
|
85
|
+
l = self._dct[h]
|
86
|
+
except KeyError:
|
87
|
+
return False
|
88
|
+
return any(self._hash_eq.eq(k, e.k) for e in l)
|
89
|
+
|
90
|
+
def __getitem__(self, k: K) -> V:
|
91
|
+
h = self._hash_eq.hash(k)
|
92
|
+
l = self._dct[h]
|
93
|
+
for e in l:
|
94
|
+
if self._hash_eq.eq(k, e.k):
|
95
|
+
return e.v
|
96
|
+
raise KeyError(k)
|
97
|
+
|
98
|
+
def __setitem__(self, k: K, v: V) -> None:
|
99
|
+
h = self._hash_eq.hash(k)
|
100
|
+
n = HashEqMap._Node(k, v, h)
|
101
|
+
|
102
|
+
try:
|
103
|
+
l = self._dct[h]
|
104
|
+
except KeyError:
|
105
|
+
l = [n]
|
106
|
+
self._dct[h] = l
|
107
|
+
self._len += 1
|
108
|
+
return
|
109
|
+
|
110
|
+
for i, e in enumerate(l):
|
111
|
+
if self._hash_eq.eq(k, e.k):
|
112
|
+
l[i] = n
|
113
|
+
return
|
114
|
+
|
115
|
+
l.append(n)
|
116
|
+
self._len += 1
|
117
|
+
|
118
|
+
def __delitem__(self, k: K) -> None:
|
119
|
+
h = self._hash_eq.hash(k)
|
120
|
+
l = self._dct[h]
|
121
|
+
for i, e in enumerate(l):
|
122
|
+
if self._hash_eq.eq(k, e.k):
|
123
|
+
del l[i]
|
124
|
+
self._len -= 1
|
125
|
+
return
|
126
|
+
raise KeyError(k)
|
127
|
+
|
128
|
+
def __iter__(self) -> ta.Iterator[K]:
|
129
|
+
return self.iterkeys()
|
130
|
+
|
131
|
+
def iterkeys(self) -> ta.Iterator[K]:
|
132
|
+
for l in self._dct.values():
|
133
|
+
for e in l:
|
134
|
+
yield e.k
|
135
|
+
|
136
|
+
def itervalues(self) -> ta.Iterator[V]:
|
137
|
+
for l in self._dct.values():
|
138
|
+
for e in l:
|
139
|
+
yield e.v
|
140
|
+
|
141
|
+
def iteritems(self) -> ta.Iterator[tuple[K, V]]:
|
142
|
+
for l in self._dct.values():
|
143
|
+
for e in l:
|
144
|
+
yield (e.k, e.v)
|
145
|
+
|
146
|
+
# FIXME:
|
147
|
+
|
148
|
+
def keys(self) -> ta.Iterable[K]: # type: ignore[override]
|
149
|
+
return lang.itergen(self.iterkeys)
|
150
|
+
|
151
|
+
def values(self) -> ta.Iterable[V]: # type: ignore[override]
|
152
|
+
return lang.itergen(self.itervalues)
|
153
|
+
|
154
|
+
def items(self) -> ta.Iterable[tuple[K, V]]: # type: ignore[override]
|
155
|
+
return lang.itergen(self.iteritems)
|
omlish/fnpairs.py
CHANGED
@@ -38,7 +38,7 @@ if ta.TYPE_CHECKING:
|
|
38
38
|
import lz4.frame as _lz4_frame
|
39
39
|
import snappy as _snappy
|
40
40
|
import yaml as _yaml
|
41
|
-
import
|
41
|
+
import zstandard as _zstandard
|
42
42
|
|
43
43
|
else:
|
44
44
|
_bz2 = lang.proxy_import('bz2')
|
@@ -55,7 +55,7 @@ else:
|
|
55
55
|
_lz4_frame = lang.proxy_import('lz4.frame')
|
56
56
|
_snappy = lang.proxy_import('snappy')
|
57
57
|
_yaml = lang.proxy_import('yaml')
|
58
|
-
|
58
|
+
_zstandard = lang.proxy_import('zstandard')
|
59
59
|
|
60
60
|
|
61
61
|
##
|
@@ -92,6 +92,10 @@ class FnPair(ta.Generic[F, T], abc.ABC):
|
|
92
92
|
##
|
93
93
|
|
94
94
|
|
95
|
+
@lang.unabstract_class([
|
96
|
+
('forward', '_forward'),
|
97
|
+
('backward', 'backward'),
|
98
|
+
])
|
95
99
|
@dc.dataclass(frozen=True)
|
96
100
|
class Simple(FnPair[F, T]):
|
97
101
|
forward: ta.Callable[[F], T] # type: ignore
|
@@ -104,12 +108,6 @@ class Simple(FnPair[F, T]):
|
|
104
108
|
return self.backward(t)
|
105
109
|
|
106
110
|
|
107
|
-
# HACK: ABC workaround. Our dataclasses handle this with `override=True` but we don't want to dep that in here.
|
108
|
-
Simple.forward = Simple._forward # type: ignore # noqa
|
109
|
-
Simple.backward = Simple._backward # type: ignore # noqa
|
110
|
-
Simple.__abstractmethods__ = frozenset() # noqa
|
111
|
-
|
112
|
-
|
113
111
|
of = Simple
|
114
112
|
|
115
113
|
NOP: FnPair[ta.Any, ta.Any] = of(lang.identity, lang.identity)
|
@@ -356,10 +354,10 @@ class Snappy(Compression):
|
|
356
354
|
@_register_extension('zstd')
|
357
355
|
class Zstd(Compression):
|
358
356
|
def forward(self, f: bytes) -> bytes:
|
359
|
-
return
|
357
|
+
return _zstandard.compress(f)
|
360
358
|
|
361
359
|
def backward(self, t: bytes) -> bytes:
|
362
|
-
return
|
360
|
+
return _zstandard.decompress(t)
|
363
361
|
|
364
362
|
|
365
363
|
##
|
omlish/lang/__init__.py
CHANGED
omlish/lang/classes/__init__.py
CHANGED
omlish/lang/classes/abstract.py
CHANGED
@@ -72,3 +72,16 @@ def is_abstract_class(obj: ta.Any) -> bool:
|
|
72
72
|
|
73
73
|
def is_abstract(obj: ta.Any) -> bool:
|
74
74
|
return is_abstract_method(obj) or is_abstract_class(obj)
|
75
|
+
|
76
|
+
|
77
|
+
def unabstract_class(
|
78
|
+
impls: ta.Iterable[tuple[str, ta.Any]],
|
79
|
+
) -> ta.Callable[[type[T]], type[T]]:
|
80
|
+
def inner(cls):
|
81
|
+
for name, impl in impls:
|
82
|
+
if isinstance(impl, str):
|
83
|
+
impl = getattr(cls, impl)
|
84
|
+
setattr(cls, name, impl)
|
85
|
+
setattr(cls, '__abstractmethods__', frozenset())
|
86
|
+
return cls
|
87
|
+
return inner
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev99
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -20,7 +20,7 @@ Requires-Dist: trio ~=0.27 ; extra == 'all'
|
|
20
20
|
Requires-Dist: trio-asyncio ~=0.15 ; extra == 'all'
|
21
21
|
Requires-Dist: lz4 ~=4.3 ; extra == 'all'
|
22
22
|
Requires-Dist: python-snappy ~=0.7 ; extra == 'all'
|
23
|
-
Requires-Dist:
|
23
|
+
Requires-Dist: zstandard ~=0.23 ; extra == 'all'
|
24
24
|
Requires-Dist: asttokens ~=2.4 ; extra == 'all'
|
25
25
|
Requires-Dist: executing ~=2.1 ; extra == 'all'
|
26
26
|
Requires-Dist: psutil ~=6.0 ; extra == 'all'
|
@@ -29,7 +29,7 @@ Requires-Dist: ujson ~=5.10 ; extra == 'all'
|
|
29
29
|
Requires-Dist: json5 ~=0.9 ; extra == 'all'
|
30
30
|
Requires-Dist: pyyaml ~=6.0 ; extra == 'all'
|
31
31
|
Requires-Dist: cbor2 ~=5.6 ; extra == 'all'
|
32
|
-
Requires-Dist: cloudpickle ~=3.
|
32
|
+
Requires-Dist: cloudpickle ~=3.1 ; extra == 'all'
|
33
33
|
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'all'
|
34
34
|
Requires-Dist: wrapt ~=1.14 ; extra == 'all'
|
35
35
|
Requires-Dist: cryptography ~=43.0 ; extra == 'all'
|
@@ -52,7 +52,7 @@ Requires-Dist: trio-asyncio ~=0.15 ; extra == 'async'
|
|
52
52
|
Provides-Extra: compress
|
53
53
|
Requires-Dist: lz4 ~=4.3 ; extra == 'compress'
|
54
54
|
Requires-Dist: python-snappy ~=0.7 ; extra == 'compress'
|
55
|
-
Requires-Dist:
|
55
|
+
Requires-Dist: zstandard ~=0.23 ; extra == 'compress'
|
56
56
|
Provides-Extra: diag
|
57
57
|
Requires-Dist: asttokens ~=2.4 ; extra == 'diag'
|
58
58
|
Requires-Dist: executing ~=2.1 ; extra == 'diag'
|
@@ -63,7 +63,7 @@ Requires-Dist: ujson ~=5.10 ; extra == 'formats'
|
|
63
63
|
Requires-Dist: json5 ~=0.9 ; extra == 'formats'
|
64
64
|
Requires-Dist: pyyaml ~=6.0 ; extra == 'formats'
|
65
65
|
Requires-Dist: cbor2 ~=5.6 ; extra == 'formats'
|
66
|
-
Requires-Dist: cloudpickle ~=3.
|
66
|
+
Requires-Dist: cloudpickle ~=3.1 ; extra == 'formats'
|
67
67
|
Provides-Extra: http
|
68
68
|
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'http'
|
69
69
|
Provides-Extra: misc
|
@@ -1,14 +1,14 @@
|
|
1
1
|
omlish/.manifests.json,sha256=hTFp9tvE72BxKloIq1s1SS0LRQlIsvMtO69Sbc47rKg,1704
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=6713nqxxPtA38L0r9uYNrMgouxInTcm_aUGG-SmXVbI,3351
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omlish/argparse.py,sha256=Dc73G8lyoQBLvXhMYUbzQUh4SJu_OTvKUXjSUxq_ang,7499
|
5
5
|
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
6
|
-
omlish/cached.py,sha256=
|
6
|
+
omlish/cached.py,sha256=vn3ZiKy0d3NW_kzoXCi_Fg_s5vUcH0LQ1idfKBcQhzk,489
|
7
7
|
omlish/check.py,sha256=rZFEn6IHiMq4KGCYxlUGcUCJP12pPPUs_-AG0aouPM8,10540
|
8
8
|
omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
|
9
9
|
omlish/defs.py,sha256=T3bq_7h_tO3nDB5RAFBn7DkdeQgqheXzkFColbOHZko,4890
|
10
10
|
omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
11
|
-
omlish/fnpairs.py,sha256=
|
11
|
+
omlish/fnpairs.py,sha256=vCuZqLz2IAM3PDaJQE3r1A4EjyrCyUNoCOjoa_SmKCU,10723
|
12
12
|
omlish/fnpipes.py,sha256=AJkgz9nvRRm7oqw7ZgYyz21klu276LWi54oYCLg-vOg,2196
|
13
13
|
omlish/genmachine.py,sha256=RlU-y_dt2nRdvoo7Z3HsUELlBn3KuyI4qUnqLVbChRI,2450
|
14
14
|
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
@@ -94,12 +94,13 @@ omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1
|
|
94
94
|
omlish/bootstrap/main.py,sha256=yZhOHDDlj4xB5a89dRdT8z58FsqqnpoBg1-tvY2CJe4,5903
|
95
95
|
omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
|
96
96
|
omlish/bootstrap/sys.py,sha256=iLHUNIuIPv-k-Mc6aHj5sSET78olCVt7t0HquFDO4iQ,8762
|
97
|
-
omlish/collections/__init__.py,sha256=
|
97
|
+
omlish/collections/__init__.py,sha256=JFphLT_jEe-h_YBKyjrI0RT4KgNvjPXRErebBHwIHfY,1763
|
98
98
|
omlish/collections/_abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
99
99
|
omlish/collections/_io_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
|
100
100
|
omlish/collections/coerce.py,sha256=o11AMrUiyoadd8WkdqeKPIpXf2xd0LyylzNCyJivCLU,7036
|
101
101
|
omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
|
102
102
|
omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
|
103
|
+
omlish/collections/hasheq.py,sha256=UXgZQycBTgPLtwt4onBlNzmjy1zuAw32xuUvOwpwM6g,3813
|
103
104
|
omlish/collections/identity.py,sha256=jhEpC8tnfh3Sg-MJff1Fp9eMydt150wits_UeVdctUk,2723
|
104
105
|
omlish/collections/indexed.py,sha256=tFQsIWH4k9QqsF5VB7DsIVNsRThiQNx-ooRF36X_PnU,2203
|
105
106
|
omlish/collections/mappings.py,sha256=eEifLZez-BWunTuj6974bGxBFfNRODZpu6Oa7_2ME94,3190
|
@@ -256,7 +257,7 @@ omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCF
|
|
256
257
|
omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
|
257
258
|
omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
|
258
259
|
omlish/inject/impl/scopes.py,sha256=ASfULXgP_ETlsAqFJfrZmyEaZt64Zr8tNn5ScA-EoXk,5900
|
259
|
-
omlish/lang/__init__.py,sha256=
|
260
|
+
omlish/lang/__init__.py,sha256=pKAxhQe2qbN9pDXPOz9_MRxTKJPPWHZyAkWoAaZ9P4M,3688
|
260
261
|
omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
|
261
262
|
omlish/lang/clsdct.py,sha256=AjtIWLlx2E6D5rC97zQ3Lwq2SOMkbg08pdO_AxpzEHI,1744
|
262
263
|
omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
|
@@ -275,8 +276,8 @@ omlish/lang/strings.py,sha256=BsciSYnckD4vGtC6kmtnugR9IN6CIHdcjO4nZu-pSAw,3898
|
|
275
276
|
omlish/lang/sys.py,sha256=UoZz_PJYVKLQAKqYxxn-LHz1okK_38I__maZgnXMcxU,406
|
276
277
|
omlish/lang/timeouts.py,sha256=vECdWYhc_IZgcal1Ng1Y42wf2FV3KAx-i8As-MgGHIQ,1186
|
277
278
|
omlish/lang/typing.py,sha256=lJ2NGe4Pmb61I0Tx4A_rOqXNFTws1XHOzafg2knRUio,4155
|
278
|
-
omlish/lang/classes/__init__.py,sha256=
|
279
|
-
omlish/lang/classes/abstract.py,sha256=
|
279
|
+
omlish/lang/classes/__init__.py,sha256=D3dn4FOQu5f50kW4_jLCI_zI0fTtADdYumirRdIqSuU,605
|
280
|
+
omlish/lang/classes/abstract.py,sha256=oleeYCMVbmFAy8aNLNKeb18Jmmgzfolymdw31m4tejQ,2679
|
280
281
|
omlish/lang/classes/restrict.py,sha256=pSK7ZT_kpwqS6lWRrxwuEe-tt07F0-uZVazgGh-HDco,3921
|
281
282
|
omlish/lang/classes/simple.py,sha256=XQ8b86WvQA0qtSYqlbMOJS7tHgE8sv9onda33uQmbkM,3294
|
282
283
|
omlish/lang/classes/virtual.py,sha256=W-QJuKsDehOcrydwg6eMN0bFPTYbk3Tz84TSH3blb44,3367
|
@@ -457,9 +458,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
457
458
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
458
459
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
459
460
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
460
|
-
omlish-0.0.0.
|
461
|
-
omlish-0.0.0.
|
462
|
-
omlish-0.0.0.
|
463
|
-
omlish-0.0.0.
|
464
|
-
omlish-0.0.0.
|
465
|
-
omlish-0.0.0.
|
461
|
+
omlish-0.0.0.dev99.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
462
|
+
omlish-0.0.0.dev99.dist-info/METADATA,sha256=dlvMKXrg8JClykUv0QJZisR5FWrEFVDWqr5W07gAKP0,3999
|
463
|
+
omlish-0.0.0.dev99.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
464
|
+
omlish-0.0.0.dev99.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
465
|
+
omlish-0.0.0.dev99.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
466
|
+
omlish-0.0.0.dev99.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|