omlish 0.0.0.dev97__py3-none-any.whl → 0.0.0.dev99__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.
- 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
|