omlish 0.0.0.dev329__py3-none-any.whl → 0.0.0.dev331__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 CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev329'
2
- __revision__ = '7e2175a0f120aff13b483ddfb737fe5676cd9721'
1
+ __version__ = '0.0.0.dev331'
2
+ __revision__ = 'd260ddf6643bc21977a894dd48c41948726f4159'
3
3
 
4
4
 
5
5
  #
@@ -331,13 +331,23 @@ class _DescriptorCachedFunction(_CachedFunction[T]):
331
331
  raise RuntimeError
332
332
  obj = type(instance)
333
333
 
334
- desc: _DescriptorCachedFunction = object.__getattribute__(obj, name)
334
+ desc: _DescriptorCachedFunction
335
+ for bc in obj.__mro__[:-1]:
336
+ try:
337
+ desc = bc.__dict__[name]
338
+ except KeyError:
339
+ continue
340
+ break
341
+ else:
342
+ raise AttributeError(name)
343
+
335
344
  if not isinstance(desc, cls):
336
345
  raise TypeError(desc)
337
- if (desc._instance is not None or desc._owner is not None):
346
+
347
+ if (desc._instance is not None or desc._owner is not None): # noqa
338
348
  raise RuntimeError
339
349
 
340
- return desc._bind(
350
+ return desc._bind( # noqa
341
351
  instance,
342
352
  owner,
343
353
  values=values,
@@ -119,6 +119,7 @@ from .polymorphism.metadata import ( # noqa
119
119
  Polymorphism,
120
120
  TypeTagging,
121
121
  WrapperTypeTagging,
122
+ polymorphism_from_impls,
122
123
  polymorphism_from_subclasses,
123
124
  )
124
125
 
@@ -105,25 +105,14 @@ class Polymorphism:
105
105
  return self._impls
106
106
 
107
107
 
108
- def polymorphism_from_subclasses(
108
+ def polymorphism_from_impls(
109
109
  ty: type,
110
+ impls: ta.Iterable[type],
110
111
  *,
111
112
  naming: Naming | None = None,
112
113
  strip_suffix: bool | ta.Literal['auto'] = False,
113
114
  ) -> Polymorphism:
114
- seen: set[type] = set()
115
- todo: list[type] = [ty]
116
- impls: set[type] = set()
117
- while todo:
118
- cur = todo.pop()
119
- seen.add(cur)
120
-
121
- todo.extend(nxt for nxt in cur.__subclasses__() if nxt not in seen)
122
-
123
- if lang.is_abstract_class(cur):
124
- continue
125
-
126
- impls.add(cur)
115
+ impls = set(impls)
127
116
 
128
117
  if strip_suffix == 'auto':
129
118
  strip_suffix = all(c.__name__.endswith(ty.__name__) for c in impls)
@@ -144,3 +133,17 @@ def polymorphism_from_subclasses(
144
133
  )
145
134
 
146
135
  return Polymorphism(ty, dct.values())
136
+
137
+
138
+ def polymorphism_from_subclasses(
139
+ ty: type,
140
+ *,
141
+ naming: Naming | None = None,
142
+ strip_suffix: bool | ta.Literal['auto'] = False,
143
+ ) -> Polymorphism:
144
+ return polymorphism_from_impls(
145
+ ty,
146
+ lang.deep_subclasses(ty, concrete_only=True),
147
+ naming=naming,
148
+ strip_suffix=strip_suffix,
149
+ )
omlish/reflect/ops.py CHANGED
@@ -6,6 +6,7 @@ from .types import Generic
6
6
  from .types import NewType
7
7
  from .types import Type
8
8
  from .types import Union
9
+ from .types import get_type_var_bound
9
10
  from .types import type_
10
11
 
11
12
 
@@ -52,20 +53,33 @@ def get_underlying(nt: NewType) -> Type:
52
53
  return type_(nt.obj.__supertype__) # noqa
53
54
 
54
55
 
55
- def get_concrete_type(ty: Type) -> type | None:
56
- if isinstance(ty, type):
57
- return ty
56
+ def get_concrete_type(
57
+ ty: Type,
58
+ *,
59
+ use_type_var_bound: bool = False,
60
+ ) -> type | None:
61
+ def rec(cur: Type) -> type | None:
62
+ if isinstance(cur, type):
63
+ return cur
58
64
 
59
- if isinstance(ty, Generic):
60
- return ty.cls
65
+ if isinstance(cur, Generic):
66
+ return cur.cls
61
67
 
62
- if isinstance(ty, NewType):
63
- return get_concrete_type(get_underlying(ty))
68
+ if isinstance(cur, NewType):
69
+ return rec(get_underlying(cur))
64
70
 
65
- if isinstance(ty, (Union, ta.TypeVar, Any)):
66
- return None
71
+ if isinstance(cur, ta.TypeVar):
72
+ if use_type_var_bound is not None and (tvb := get_type_var_bound(cur)) is not None:
73
+ return rec(type_(tvb))
67
74
 
68
- raise TypeError(ty)
75
+ return None
76
+
77
+ if isinstance(cur, (Union, Any)):
78
+ return None
79
+
80
+ raise TypeError(cur)
81
+
82
+ return rec(ty)
69
83
 
70
84
 
71
85
  def to_annotation(ty: Type) -> ta.Any:
omlish/reflect/subst.py CHANGED
@@ -85,12 +85,12 @@ class GenericSubstitution:
85
85
  if (cty := get_concrete_type(ty)) is not None:
86
86
  rpl = get_type_var_replacements(ty)
87
87
  ret: list[Type] = []
88
- for b in types.get_original_bases(cty):
88
+ obs = types.get_original_bases(cty)
89
+ for b in obs:
89
90
  bty = type_(b)
90
91
  if isinstance(bty, Generic) and isinstance(b, type):
91
92
  # FIXME: throws away relative types, but can't use original vars as they're class-contextual
92
93
  bty = type_(b[*((ta.Any,) * len(bty.params))]) # type: ignore
93
- # rpl2 = {p: rpl[a] for p, a in zip(bty.params, bty.args)}
94
94
  rty = replace_type_vars(bty, rpl, update_aliases=self._update_aliases)
95
95
  ret.append(rty)
96
96
  return tuple(ret)
@@ -35,74 +35,62 @@ class TypedValues(
35
35
  override: bool = False,
36
36
  check_type: type | tuple[type, ...] | None = None,
37
37
  ) -> None:
38
- if hasattr(self, '_tup'):
39
- # When __new__ returns the empty singleton __init__ will still be called.
40
- if self is not self._EMPTY:
41
- raise RuntimeError
42
- return
43
-
44
38
  super().__init__()
45
39
 
46
- tmp: list = []
47
- udct: dict = {}
48
- for tv in tvs:
49
- if check_type is not None:
50
- check.isinstance(tv, check_type)
51
- if isinstance(tv, UniqueTypedValue):
52
- utvc = tv._unique_typed_value_cls # noqa
53
- if not override:
54
- try:
55
- exu = udct[utvc]
56
- except KeyError:
57
- pass
58
- else:
59
- raise DuplicateUniqueTypedValueError(utvc, tv, check.single(exu))
60
- ulst = udct.setdefault(utvc, [])
61
- ulst.append(tv)
62
- tmp.append((utvc, tv, ulst, len(ulst)))
63
- elif isinstance(tv, TypedValue):
64
- tmp.append(tv)
65
- else:
66
- raise TypeError(tv)
67
-
68
- lst: list = []
69
- dct: dict = {}
70
- for obj in tmp:
71
- if isinstance(obj, tuple):
72
- utvc, tv, ulst, idx = obj
73
- if idx == len(ulst):
40
+ if tvs:
41
+ tmp: list = []
42
+ udct: dict = {}
43
+ for tv in tvs:
44
+ if check_type is not None:
45
+ check.isinstance(tv, check_type)
46
+ if isinstance(tv, UniqueTypedValue):
47
+ utvc = tv._unique_typed_value_cls # noqa
48
+ if not override:
49
+ try:
50
+ exu = udct[utvc]
51
+ except KeyError:
52
+ pass
53
+ else:
54
+ raise DuplicateUniqueTypedValueError(utvc, tv, check.single(exu))
55
+ ulst = udct.setdefault(utvc, [])
56
+ ulst.append(tv)
57
+ tmp.append((utvc, tv, ulst, len(ulst)))
58
+ elif isinstance(tv, TypedValue):
59
+ tmp.append(tv)
60
+ else:
61
+ raise TypeError(tv)
62
+
63
+ lst: list = []
64
+ dct: dict = {}
65
+ for obj in tmp:
66
+ if isinstance(obj, tuple):
67
+ utvc, tv, ulst, idx = obj
68
+ if idx == len(ulst):
69
+ lst.append(tv)
70
+ dct[utvc] = tv
71
+ else:
72
+ tv = obj
74
73
  lst.append(tv)
75
- dct[utvc] = tv
76
- else:
77
- tv = obj
78
- lst.append(tv)
79
- dct.setdefault(type(tv), []).append(tv)
80
-
81
- self._tup: tuple[TypedValueT, ...] = tuple(lst)
82
- self._dct: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = {
83
- k: tuple(v) if isinstance(v, list) else v
84
- for k, v in dct.items()
85
- }
86
- self._dct2: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = {
87
- **self._dct,
88
- **{type(v): v for v in self._dct.values() if isinstance(v, UniqueTypedValue)}, # type: ignore[misc]
89
- }
90
-
91
- #
92
-
93
- _EMPTY: ta.ClassVar['TypedValues']
74
+ dct.setdefault(type(tv), []).append(tv)
75
+
76
+ tup = tuple(lst)
77
+ dct = {
78
+ k: tuple(v) if isinstance(v, list) else v
79
+ for k, v in dct.items()
80
+ }
81
+ dct2 = {
82
+ **dct,
83
+ **{type(v): v for v in dct.values() if isinstance(v, UniqueTypedValue)},
84
+ }
94
85
 
95
- @classmethod
96
- def empty(cls) -> 'TypedValues':
97
- return cls._EMPTY
86
+ else:
87
+ tup = ()
88
+ dct = {}
89
+ dct2 = {}
98
90
 
99
- def __new__(cls, *tvs, **kwargs): # noqa
100
- if not tvs:
101
- try:
102
- return cls._EMPTY
103
- except AttributeError:
104
- pass
105
- return super().__new__(cls)
91
+ self._tup: tuple[TypedValueT, ...] = tup
92
+ self._dct: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = dct
93
+ self._dct2: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = dct2
106
94
 
107
95
  #
108
96
 
@@ -216,6 +204,3 @@ class TypedValues(
216
204
  ret = tuple(tv for tv in self if isinstance(tv, cls))
217
205
  any_dct[cls] = ret
218
206
  return ret
219
-
220
-
221
- TypedValues._EMPTY = TypedValues() # noqa
@@ -22,10 +22,6 @@ class TypedValueGeneric(lang.Abstract, ta.Generic[TypedValueT]):
22
22
  return
23
23
 
24
24
  g_mro = rfl.ALIAS_UPDATING_GENERIC_SUBSTITUTION.generic_mro(cls)
25
- g_tvg = check.single(
26
- gb
27
- for gb in g_mro
28
- if isinstance(gb, rfl.Generic) and gb.cls is TypedValueGeneric
29
- )
25
+ g_tvg = check.single(gb for gb in g_mro if isinstance(gb, rfl.Generic) and gb.cls is TypedValueGeneric)
30
26
  tvt = check.single(g_tvg.args)
31
27
  cls._typed_value_type = tvt
@@ -81,12 +81,18 @@ def _build_typed_values_impls(rty: rfl.Type) -> msh.Impls:
81
81
  gty = check.isinstance(rty, rfl.Generic)
82
82
  check.is_(gty.cls, TypedValues)
83
83
 
84
- tv_cls_set = reflect_typed_values_impls(check.single(gty.args))
85
-
86
- tv_impls: list[msh.Impl] = []
87
- for tv_cls in tv_cls_set:
88
- tv_impls.extend(_build_typed_value_poly(tv_cls).impls)
84
+ tv_cls_set = reflect_typed_values_impls(
85
+ check.single(gty.args),
86
+ find_abstract_subclasses=True,
87
+ )
89
88
 
89
+ tv_impls: list[msh.Impl] = [
90
+ msh.Impl(
91
+ tv_cls,
92
+ msh.translate_name(tv_cls.__name__, msh.Naming.SNAKE),
93
+ )
94
+ for tv_cls in tv_cls_set
95
+ ]
90
96
  return msh.Impls(tv_impls)
91
97
 
92
98
 
@@ -100,6 +106,10 @@ class TypedValuesMarshalerFactory(msh.MarshalerFactoryMatchClass):
100
106
  )
101
107
  return msh.IterableMarshaler(tv_m)
102
108
 
109
+ @mfs.simple(lambda _, ctx, rty: rty is TypedValues)
110
+ def _build_concrete(self, ctx: msh.MarshalContext, rty: rfl.Type) -> msh.Marshaler:
111
+ raise NotImplementedError
112
+
103
113
 
104
114
  class TypedValuesUnmarshalerFactory(msh.UnmarshalerFactoryMatchClass):
105
115
  @mfs.simple(lambda _, ctx, rty: isinstance(rty, rfl.Generic) and rty.cls is TypedValues)
@@ -111,6 +121,10 @@ class TypedValuesUnmarshalerFactory(msh.UnmarshalerFactoryMatchClass):
111
121
  )
112
122
  return msh.IterableUnmarshaler(lambda it: TypedValues(*it), tv_u) # noqa
113
123
 
124
+ @mfs.simple(lambda _, ctx, rty: rty is TypedValues)
125
+ def _build_concrete(self, ctx: msh.UnmarshalContext, rty: rfl.Type) -> msh.Unmarshaler:
126
+ raise NotImplementedError
127
+
114
128
 
115
129
  ##
116
130
 
@@ -1,6 +1,7 @@
1
1
  import typing as ta
2
2
 
3
3
  from .. import check
4
+ from .. import lang
4
5
  from .. import reflect as rfl
5
6
  from .values import TypedValue
6
7
 
@@ -8,10 +9,13 @@ from .values import TypedValue
8
9
  ##
9
10
 
10
11
 
11
- def reflect_typed_values_impls(rty: rfl.Type) -> set[type[TypedValue]]:
12
+ def reflect_typed_values_impls(
13
+ *rtys: rfl.Type,
14
+ find_abstract_subclasses: bool = False,
15
+ ) -> set[type[TypedValue]]:
12
16
  tv_cls_set: set[type[TypedValue]] = set()
13
17
 
14
- todo = [rty]
18
+ todo = list(rtys)
15
19
  seen = set()
16
20
  while todo:
17
21
  cur = todo.pop()
@@ -21,9 +25,20 @@ def reflect_typed_values_impls(rty: rfl.Type) -> set[type[TypedValue]]:
21
25
 
22
26
  if isinstance(cur, rfl.Union):
23
27
  todo.extend(cur.args)
28
+
24
29
  elif isinstance(cur, ta.TypeVar):
25
30
  todo.append(rfl.type_(rfl.get_type_var_bound(cur)))
31
+
32
+ elif isinstance(cur, type):
33
+ cur = check.issubclass(check.isinstance(cur, type), TypedValue)
34
+
35
+ if find_abstract_subclasses and lang.is_abstract_class(cur):
36
+ todo.extend(lang.deep_subclasses(cur, concrete_only=True))
37
+
38
+ else:
39
+ tv_cls_set.add(cur)
40
+
26
41
  else:
27
- tv_cls_set.add(check.issubclass(check.isinstance(cur, type), TypedValue))
42
+ raise TypeError(cur)
28
43
 
29
44
  return tv_cls_set
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev329
3
+ Version: 0.0.0.dev331
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
2
- omlish/__about__.py,sha256=JwUnRBh_MVapCgN8U8iae56nu3Vx67AkLzhPkLM7640,3478
2
+ omlish/__about__.py,sha256=0UbBN9lPmVwVRqut0sXZlqLeaoVAJVmIbW5gTMvKp4E,3478
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -429,7 +429,7 @@ omlish/lang/strings.py,sha256=kJmRFd1D36xXcjd9MdB12BCwF_-MVhNr-TpWj7hMi_4,4252
429
429
  omlish/lang/sys.py,sha256=b4qOPiJZQru_mbb04FNfOjYWUxlV2becZOoc-yya_rQ,411
430
430
  omlish/lang/typing.py,sha256=eWI3RKhVi-_SV2rN4SGq8IbFo5XbGapbiWeduF97uG8,3846
431
431
  omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
432
- omlish/lang/cached/function.py,sha256=-LSaxkpRdNZw_cuQdKspuPh1tVJrHm4qecNEGzRKnTQ,11322
432
+ omlish/lang/cached/function.py,sha256=su9QxYECK9NK-UfMFKbgx4lqH2WoGBiYshnEfaGvfhw,11522
433
433
  omlish/lang/cached/property.py,sha256=WHYyg4-6EA86TcNMfbXTjVhjEZPc0kngt9hfY3WN5w8,2768
434
434
  omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
435
435
  omlish/lang/classes/abstract.py,sha256=A-Jg5X8o_WvFryN0Cm2TpVkrZoTT1SYKQnv_pXjZk7o,3808
@@ -488,7 +488,7 @@ omlish/manifests/base.py,sha256=D1WvJYcBR_njkc0gpALpFCWh1h3agb9qgqphnbbPlm4,935
488
488
  omlish/manifests/load.py,sha256=9mdsS3egmSX9pymO-m-y2Fhs4p6ruOdbsYaKT1-1Hwg,6655
489
489
  omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
490
490
  omlish/manifests/types.py,sha256=IOt9dOe0r8okCHSL82ryi3sn4VZ6AT80g_QQR6oZtCE,306
491
- omlish/marshal/__init__.py,sha256=6nTREepo0aGQZcJdeOUkJRnSZ9Mx2Q1ok2XoE4dqijM,3366
491
+ omlish/marshal/__init__.py,sha256=7jIXe9wQv-if1iRUuU6a4MdHScTLFFL8X2JwHaNTAxI,3395
492
492
  omlish/marshal/base.py,sha256=Q0ZRsz5z0NTI6PeWPc9mdMstJryDDbeIAdpKH9-SDps,11427
493
493
  omlish/marshal/errors.py,sha256=g5XJyTHd__8lfwQ4KwgK-E5WR6MoNTMrqKP2U_QRQQQ,307
494
494
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
@@ -515,7 +515,7 @@ omlish/marshal/objects/namedtuples.py,sha256=8de8L7rwmvr_LLBHHfOl2wHObxc_1yZ8fC_
515
515
  omlish/marshal/objects/unmarshal.py,sha256=IXIl_iokvVCSWYhkRORrWP_sE1DVklnrUErGWg_3MDc,3632
516
516
  omlish/marshal/polymorphism/__init__.py,sha256=e2UTrSL0qp7w_1vkdxDWd7sXlWhep2KPV49-BB64ma8,130
517
517
  omlish/marshal/polymorphism/marshal.py,sha256=wVaUxiHMJwyEWfQIE3cuEcJFSMVNJhpdJoa1yRgBPUE,2260
518
- omlish/marshal/polymorphism/metadata.py,sha256=vINF55KtmdjCmNwu5K8UeYAF99sR_weYoTHCqHe5_eg,3249
518
+ omlish/marshal/polymorphism/metadata.py,sha256=Tvrjvi1kVhBbuljcQI60BXOIPEh-0_MGHXZDP-YKg1M,3335
519
519
  omlish/marshal/polymorphism/unions.py,sha256=NDXh2aVCLUFfi10qvIZR39prtHwjndQiVl13XcIKV3k,4386
520
520
  omlish/marshal/polymorphism/unmarshal.py,sha256=5jJnDarY85PuGTeL_9bwoeHjNIZnfVN3zr5rVhmNoQc,2451
521
521
  omlish/marshal/singular/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -565,8 +565,8 @@ omlish/os/pidfiles/pidfile.py,sha256=9tI5IMVwfPfnni0XMn4x5ptNQgm36n8tLeUNPf50UqU
565
565
  omlish/os/pidfiles/pinning.py,sha256=aQgCmvcAqN0lvI70GcSB2TKVX1G4vwbyN_AOHF3-eKE,6630
566
566
  omlish/reflect/__init__.py,sha256=64eHbD6zL6Fhp7FfXb8n9ZHywlODjBN3rm1LMvZ081A,822
567
567
  omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
568
- omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
569
- omlish/reflect/subst.py,sha256=CeOxa2v9pMqPlL039C348CBl1iDKWir1xykFC3xFfO8,3744
568
+ omlish/reflect/ops.py,sha256=9F369zrp6dNJUiGLLrYhb2O-Zss0BhTcpo3dzdLCq-I,2424
569
+ omlish/reflect/subst.py,sha256=jpBgYR1_JyH9fz5b-gmOg7OhFKk7jIxEh7hwtKYKC9Q,3691
570
570
  omlish/reflect/types.py,sha256=Cn9FYGoiCNt0FS0YLiTTAR12WKcesWMapCrVYcb8IDo,9225
571
571
  omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
572
572
  omlish/secrets/all.py,sha256=gv_d9SfyMxso30HsrSz9XmIrSZOdl3rLA5MSH0ZXfgM,486
@@ -850,16 +850,16 @@ omlish/text/go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
850
850
  omlish/text/go/quoting.py,sha256=N9EYdnFdEX_A8fOviH-1w4jwV3XOQ7VU2WsoUNubYVY,9137
851
851
  omlish/typedvalues/__init__.py,sha256=nzpnoRW_wScMPit5Xz37ky3nKBdzzkgtnQA4SfVHN8E,684
852
852
  omlish/typedvalues/accessor.py,sha256=_NEGBmQ84-h_rDfYeoq7DA20fhj3dogQuvzxXKhjx54,3121
853
- omlish/typedvalues/collection.py,sha256=a6Je_kmz2FlAV2dI92S7c_paXge0QExMynV-fD9oPrs,5823
853
+ omlish/typedvalues/collection.py,sha256=TjNuEEyTXbGfbsk7nvBB_Jhgz94R5JSs0u6ocNAlj3Y,5511
854
854
  omlish/typedvalues/consumer.py,sha256=peDQAgriSyBx_Hc8QHAhEgYy0oSS52qQ_7Tqdssl2AE,4375
855
- omlish/typedvalues/generic.py,sha256=byWG_gMXhNelckUwdmOoJE9FKkL71Q4BSi4ZLyy0XZ0,788
855
+ omlish/typedvalues/generic.py,sha256=ft-x4X3k1oFirtYnDfsvrI3ZQikWM8lGLrvrOEbcGq0,742
856
856
  omlish/typedvalues/holder.py,sha256=vu-umn-h1nvUqmtV5T9ZfQ_OoOYsERu8PhI2N48Ryns,1133
857
- omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
858
- omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
857
+ omlish/typedvalues/marshal.py,sha256=pGA4qzAmpqJTeUya4sTSNEkuXoyUdg5l_XTotR8v9SU,4694
858
+ omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
859
859
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
860
- omlish-0.0.0.dev329.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
861
- omlish-0.0.0.dev329.dist-info/METADATA,sha256=RxxJstMcBeaIHqBd5QKW_CW1ljHT00laXL0A3DnX8b4,4416
862
- omlish-0.0.0.dev329.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
863
- omlish-0.0.0.dev329.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
864
- omlish-0.0.0.dev329.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
865
- omlish-0.0.0.dev329.dist-info/RECORD,,
860
+ omlish-0.0.0.dev331.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
861
+ omlish-0.0.0.dev331.dist-info/METADATA,sha256=LPTnC-GcKfRYBxXrfNc-5GkZGyoB76oVPWDcECXYz5A,4416
862
+ omlish-0.0.0.dev331.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
863
+ omlish-0.0.0.dev331.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
864
+ omlish-0.0.0.dev331.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
865
+ omlish-0.0.0.dev331.dist-info/RECORD,,