omlish 0.0.0.dev484__py3-none-any.whl → 0.0.0.dev493__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.

Potentially problematic release.


This version of omlish might be problematic. Click here for more details.

Files changed (62) hide show
  1. omlish/README.md +199 -0
  2. omlish/__about__.py +8 -3
  3. omlish/dataclasses/impl/generation/plans.py +2 -17
  4. omlish/dataclasses/impl/generation/processor.py +2 -2
  5. omlish/dataclasses/impl/processing/driving.py +13 -1
  6. omlish/diag/_pycharm/runhack.py +1 -1
  7. omlish/inject/__init__.py +19 -11
  8. omlish/inject/_dataclasses.py +1485 -1323
  9. omlish/inject/binder.py +7 -4
  10. omlish/inject/eagers.py +2 -0
  11. omlish/inject/helpers/late.py +76 -0
  12. omlish/inject/{managed.py → helpers/managed.py} +10 -10
  13. omlish/inject/impl/elements.py +7 -4
  14. omlish/inject/impl/injector.py +10 -7
  15. omlish/inject/inspect.py +1 -1
  16. omlish/lang/__init__.py +2 -0
  17. omlish/lifecycles/README.md +30 -0
  18. omlish/lifecycles/__init__.py +87 -13
  19. omlish/lifecycles/_dataclasses.py +1388 -0
  20. omlish/lifecycles/base.py +178 -64
  21. omlish/lifecycles/contextmanagers.py +113 -4
  22. omlish/lifecycles/controller.py +150 -87
  23. omlish/lifecycles/injection.py +143 -0
  24. omlish/lifecycles/listeners.py +56 -0
  25. omlish/lifecycles/managed.py +142 -0
  26. omlish/lifecycles/manager.py +218 -93
  27. omlish/lifecycles/states.py +2 -0
  28. omlish/lifecycles/transitions.py +3 -0
  29. omlish/lifecycles/unwrap.py +57 -0
  30. omlish/lite/typing.py +18 -0
  31. omlish/logs/_amalg.py +1 -1
  32. omlish/logs/all.py +25 -11
  33. omlish/logs/asyncs.py +73 -0
  34. omlish/logs/base.py +101 -12
  35. omlish/logs/contexts.py +4 -1
  36. omlish/logs/lists.py +125 -0
  37. omlish/logs/modules.py +19 -1
  38. omlish/logs/std/loggers.py +6 -1
  39. omlish/logs/std/noisy.py +11 -9
  40. omlish/logs/{standard.py → std/standard.py} +3 -4
  41. omlish/logs/utils.py +16 -1
  42. omlish/marshal/_dataclasses.py +781 -781
  43. omlish/reflect/__init__.py +43 -26
  44. omlish/reflect/ops.py +10 -1
  45. omlish/specs/jmespath/_dataclasses.py +559 -559
  46. omlish/specs/jsonschema/keywords/_dataclasses.py +220 -220
  47. omlish/sql/__init__.py +24 -5
  48. omlish/sql/api/dbapi.py +1 -1
  49. omlish/sql/dbapi/__init__.py +15 -0
  50. omlish/sql/{dbapi.py → dbapi/drivers.py} +2 -2
  51. omlish/sql/queries/__init__.py +3 -0
  52. omlish/testing/pytest/plugins/asyncs/plugin.py +2 -0
  53. omlish/text/docwrap/cli.py +5 -0
  54. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/METADATA +8 -5
  55. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/RECORD +61 -51
  56. omlish/lifecycles/abstract.py +0 -86
  57. /omlish/inject/{impl → helpers}/proxy.py +0 -0
  58. /omlish/sql/{abc.py → dbapi/abc.py} +0 -0
  59. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/WHEEL +0 -0
  60. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/entry_points.txt +0 -0
  61. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/licenses/LICENSE +0 -0
  62. {omlish-0.0.0.dev484.dist-info → omlish-0.0.0.dev493.dist-info}/top_level.txt +0 -0
@@ -25,27 +25,30 @@ def _register(**kwargs):
25
25
 
26
26
  @_register(
27
27
  plan_repr=(
28
- "Plans(tup=(CopyPlan(fields=('listener',)), EqPlan(fields=('listener',)), FrozenPlan(fields=('listener',), allo"
29
- "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('listener',), cache=True), InitPlan(fields=(Init"
30
- "Plan.Field(name='listener', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=N"
31
- "one, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),),"
32
- " self_param='self', std_params=('listener',), kw_only_params=(), frozen=True, slots=False, post_init_params=()"
33
- ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='listener', kw_only=False, fn=None),), i"
34
- "d=False, terse=False, default_fn=None)))"
28
+ "Plans(tup=(CopyPlan(fields=('fn',)), EqPlan(fields=('fn',)), FrozenPlan(fields=('fn',), allow_dynamic_dunder_a"
29
+ "ttrs=False), HashPlan(action='add', fields=('fn',), cache=True), InitPlan(fields=(InitPlan.Field(name='fn', an"
30
+ "notation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False"
31
+ ", field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fields.0.validate'), check_type=None),"
32
+ "), self_param='self', std_params=('fn',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, "
33
+ "init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='fn', kw_only=False, fn=None),), id=False,"
34
+ " terse=False, default_fn=None)))"
35
35
  ),
36
- plan_repr_sha1='01ca4dd7c51876d086eb4230f400151c659e0842',
36
+ plan_repr_sha1='465d8361a14bec38d3a20f2ef3aaeaed5cd23067',
37
37
  op_ref_idents=(
38
38
  '__dataclass__init__fields__0__annotation',
39
+ '__dataclass__init__fields__0__validate',
39
40
  ),
40
41
  cls_names=(
41
- ('omlish.inject.listeners', 'ProvisionListenerBinding'),
42
+ ('omlish.inject.binder', 'AsyncFnProvider'),
43
+ ('omlish.inject.binder', 'FnProvider'),
42
44
  ),
43
45
  )
44
- def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
46
+ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
45
47
  def _process_dataclass(
46
48
  *,
47
49
  __dataclass__cls,
48
50
  __dataclass__init__fields__0__annotation,
51
+ __dataclass__init__fields__0__validate,
49
52
  __dataclass__FieldFnValidationError, # noqa
50
53
  __dataclass__FieldTypeValidationError, # noqa
51
54
  __dataclass__FnValidationError, # noqa
@@ -64,7 +67,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
64
67
  if self.__class__ is not __dataclass__cls:
65
68
  raise TypeError(self)
66
69
  return __dataclass__cls( # noqa
67
- listener=self.listener,
70
+ fn=self.fn,
68
71
  )
69
72
 
70
73
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -78,7 +81,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
78
81
  if self.__class__ is not other.__class__:
79
82
  return NotImplemented
80
83
  return (
81
- self.listener == other.listener
84
+ self.fn == other.fn
82
85
  )
83
86
 
84
87
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -87,7 +90,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
87
90
  setattr(__dataclass__cls, '__eq__', __eq__)
88
91
 
89
92
  __dataclass___setattr_frozen_fields = {
90
- 'listener',
93
+ 'fn',
91
94
  }
92
95
 
93
96
  def __setattr__(self, name, value):
@@ -104,7 +107,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
104
107
  setattr(__dataclass__cls, '__setattr__', __setattr__)
105
108
 
106
109
  __dataclass___delattr_frozen_fields = {
107
- 'listener',
110
+ 'fn',
108
111
  }
109
112
 
110
113
  def __delattr__(self, name):
@@ -129,7 +132,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
129
132
  self,
130
133
  '__dataclass_hash__',
131
134
  h := hash((
132
- self.listener,
135
+ self.fn,
133
136
  ))
134
137
  )
135
138
  return h
@@ -139,10 +142,16 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
139
142
 
140
143
  def __init__(
141
144
  self,
142
- listener: __dataclass__init__fields__0__annotation,
145
+ fn: __dataclass__init__fields__0__annotation,
143
146
  ) -> __dataclass__None:
144
- __dataclass__object_setattr(self, 'listener', listener)
145
- self.__post_init__()
147
+ if not __dataclass__init__fields__0__validate(fn):
148
+ raise __dataclass__FieldFnValidationError(
149
+ obj=self,
150
+ fn=__dataclass__init__fields__0__validate,
151
+ field='fn',
152
+ value=fn,
153
+ )
154
+ __dataclass__object_setattr(self, 'fn', fn)
146
155
 
147
156
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
148
157
  if '__init__' in __dataclass__cls.__dict__:
@@ -152,7 +161,7 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
152
161
  @__dataclass___recursive_repr()
153
162
  def __repr__(self):
154
163
  parts = []
155
- parts.append(f"listener={self.listener!r}")
164
+ parts.append(f"fn={self.fn!r}")
156
165
  return (
157
166
  f"{self.__class__.__qualname__}("
158
167
  f"{', '.join(parts)}"
@@ -169,31 +178,46 @@ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
169
178
 
170
179
  @_register(
171
180
  plan_repr=(
172
- "Plans(tup=(CopyPlan(fields=('owner', 'p')), EqPlan(fields=('owner', 'p')), FrozenPlan(fields=('owner', 'p'), a"
173
- "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('owner', 'p'), cache=False), InitPlan(fields="
174
- "(InitPlan.Field(name='owner', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory"
175
- "=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),"
176
- " InitPlan.Field(name='p', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=Non"
177
- "e, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None)), se"
178
- "lf_param='self', std_params=('owner', 'p'), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
179
- ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='owner', kw_only=False, fn=None), ReprPl"
180
- "an.Field(name='p', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
181
+ "Plans(tup=(CopyPlan(fields=('key', 'provider', 'scope')), EqPlan(fields=('key', 'provider', 'scope')), FrozenP"
182
+ "lan(fields=('key', 'provider', 'scope'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ke"
183
+ "y', 'provider', 'scope'), cache=True), InitPlan(fields=(InitPlan.Field(name='key', annotation=OpRef(name='init"
184
+ ".fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.IN"
185
+ "STANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None), InitPlan.Field(name='provi"
186
+ "der', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None, init=True, overri"
187
+ "de=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.1.coerce'), validate=None, check_type="
188
+ "None), InitPlan.Field(name='scope', annotation=OpRef(name='init.fields.2.annotation'), default=OpRef(name='ini"
189
+ "t.fields.2.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=O"
190
+ "pRef(name='init.fields.2.coerce'), validate=None, check_type=None)), self_param='self', std_params=('key', 'pr"
191
+ "ovider', 'scope'), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), validate_fns"
192
+ "=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=False, fn=None), ReprPlan.Field(name='provider', kw_"
193
+ "only=False, fn=None), ReprPlan.Field(name='scope', kw_only=False, fn=None)), id=False, terse=False, default_fn"
194
+ "=None)))"
181
195
  ),
182
- plan_repr_sha1='0f6ba4c593adbc50913cf38fc7c075e91843dbde',
196
+ plan_repr_sha1='46c59d586838c9ad0bfaea00944f56523114cba1',
183
197
  op_ref_idents=(
184
198
  '__dataclass__init__fields__0__annotation',
199
+ '__dataclass__init__fields__0__coerce',
185
200
  '__dataclass__init__fields__1__annotation',
201
+ '__dataclass__init__fields__1__coerce',
202
+ '__dataclass__init__fields__2__annotation',
203
+ '__dataclass__init__fields__2__coerce',
204
+ '__dataclass__init__fields__2__default',
186
205
  ),
187
206
  cls_names=(
188
- ('omlish.inject.impl.privates', 'PrivateInfo'),
207
+ ('omlish.inject.binder', 'Binding'),
189
208
  ),
190
209
  )
191
- def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
210
+ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
192
211
  def _process_dataclass(
193
212
  *,
194
213
  __dataclass__cls,
195
214
  __dataclass__init__fields__0__annotation,
215
+ __dataclass__init__fields__0__coerce,
196
216
  __dataclass__init__fields__1__annotation,
217
+ __dataclass__init__fields__1__coerce,
218
+ __dataclass__init__fields__2__annotation,
219
+ __dataclass__init__fields__2__coerce,
220
+ __dataclass__init__fields__2__default,
197
221
  __dataclass__FieldFnValidationError, # noqa
198
222
  __dataclass__FieldTypeValidationError, # noqa
199
223
  __dataclass__FnValidationError, # noqa
@@ -212,8 +236,9 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
212
236
  if self.__class__ is not __dataclass__cls:
213
237
  raise TypeError(self)
214
238
  return __dataclass__cls( # noqa
215
- owner=self.owner,
216
- p=self.p,
239
+ key=self.key,
240
+ provider=self.provider,
241
+ scope=self.scope,
217
242
  )
218
243
 
219
244
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -227,8 +252,9 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
227
252
  if self.__class__ is not other.__class__:
228
253
  return NotImplemented
229
254
  return (
230
- self.owner == other.owner and
231
- self.p == other.p
255
+ self.key == other.key and
256
+ self.provider == other.provider and
257
+ self.scope == other.scope
232
258
  )
233
259
 
234
260
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -237,8 +263,9 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
237
263
  setattr(__dataclass__cls, '__eq__', __eq__)
238
264
 
239
265
  __dataclass___setattr_frozen_fields = {
240
- 'owner',
241
- 'p',
266
+ 'key',
267
+ 'provider',
268
+ 'scope',
242
269
  }
243
270
 
244
271
  def __setattr__(self, name, value):
@@ -255,8 +282,9 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
255
282
  setattr(__dataclass__cls, '__setattr__', __setattr__)
256
283
 
257
284
  __dataclass___delattr_frozen_fields = {
258
- 'owner',
259
- 'p',
285
+ 'key',
286
+ 'provider',
287
+ 'scope',
260
288
  }
261
289
 
262
290
  def __delattr__(self, name):
@@ -273,21 +301,37 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
273
301
  setattr(__dataclass__cls, '__delattr__', __delattr__)
274
302
 
275
303
  def __hash__(self):
276
- return hash((
277
- self.owner,
278
- self.p,
279
- ))
304
+ try:
305
+ return self.__dataclass_hash__
306
+ except AttributeError:
307
+ pass
308
+ object.__setattr__(
309
+ self,
310
+ '__dataclass_hash__',
311
+ h := hash((
312
+ self.key,
313
+ self.provider,
314
+ self.scope,
315
+ ))
316
+ )
317
+ return h
280
318
 
281
319
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
282
320
  setattr(__dataclass__cls, '__hash__', __hash__)
283
321
 
284
322
  def __init__(
285
323
  self,
286
- owner: __dataclass__init__fields__0__annotation,
287
- p: __dataclass__init__fields__1__annotation,
324
+ key: __dataclass__init__fields__0__annotation,
325
+ provider: __dataclass__init__fields__1__annotation,
326
+ scope: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
288
327
  ) -> __dataclass__None:
289
- __dataclass__object_setattr(self, 'owner', owner)
290
- __dataclass__object_setattr(self, 'p', p)
328
+ key = __dataclass__init__fields__0__coerce(key)
329
+ provider = __dataclass__init__fields__1__coerce(provider)
330
+ scope = __dataclass__init__fields__2__coerce(scope)
331
+ __dataclass__object_setattr(self, 'key', key)
332
+ __dataclass__object_setattr(self, 'provider', provider)
333
+ __dataclass__object_setattr(self, 'scope', scope)
334
+ self.__post_init__()
291
335
 
292
336
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
293
337
  if '__init__' in __dataclass__cls.__dict__:
@@ -297,8 +341,9 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
297
341
  @__dataclass___recursive_repr()
298
342
  def __repr__(self):
299
343
  parts = []
300
- parts.append(f"owner={self.owner!r}")
301
- parts.append(f"p={self.p!r}")
344
+ parts.append(f"key={self.key!r}")
345
+ parts.append(f"provider={self.provider!r}")
346
+ parts.append(f"scope={self.scope!r}")
302
347
  return (
303
348
  f"{self.__class__.__qualname__}("
304
349
  f"{', '.join(parts)}"
@@ -315,22 +360,22 @@ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
315
360
 
316
361
  @_register(
317
362
  plan_repr=(
318
- "Plans(tup=(CopyPlan(fields=('v',)), FrozenPlan(fields=('v',), allow_dynamic_dunder_attrs=False), InitPlan(fiel"
319
- "ds=(InitPlan.Field(name='v', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory="
320
- "None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),)"
321
- ", self_param='self', std_params=('v',), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init"
322
- "_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='v', kw_only=False, fn=None),), id=False, ters"
323
- "e=False, default_fn=None)))"
363
+ "Plans(tup=(CopyPlan(fields=('v',)), EqPlan(fields=('v',)), FrozenPlan(fields=('v',), allow_dynamic_dunder_attr"
364
+ "s=False), HashPlan(action='add', fields=('v',), cache=True), InitPlan(fields=(InitPlan.Field(name='v', annotat"
365
+ "ion=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, fie"
366
+ "ld_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),), self_param='self', std_params=('v'"
367
+ ",), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPla"
368
+ "n(fields=(ReprPlan.Field(name='v', kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
324
369
  ),
325
- plan_repr_sha1='1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c',
370
+ plan_repr_sha1='454972cdb0715dc22365cb0a504288ac36355c45',
326
371
  op_ref_idents=(
327
372
  '__dataclass__init__fields__0__annotation',
328
373
  ),
329
374
  cls_names=(
330
- ('omlish.inject.helpers.constfn', 'ConstFn'),
375
+ ('omlish.inject.binder', 'ConstProvider'),
331
376
  ),
332
377
  )
333
- def _process_dataclass__1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c():
378
+ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
334
379
  def _process_dataclass(
335
380
  *,
336
381
  __dataclass__cls,
@@ -361,6 +406,20 @@ def _process_dataclass__1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c():
361
406
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
362
407
  setattr(__dataclass__cls, '__copy__', __copy__)
363
408
 
409
+ def __eq__(self, other):
410
+ if self is other:
411
+ return True
412
+ if self.__class__ is not other.__class__:
413
+ return NotImplemented
414
+ return (
415
+ self.v == other.v
416
+ )
417
+
418
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
419
+ if '__eq__' in __dataclass__cls.__dict__:
420
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
421
+ setattr(__dataclass__cls, '__eq__', __eq__)
422
+
364
423
  __dataclass___setattr_frozen_fields = {
365
424
  'v',
366
425
  }
@@ -395,12 +454,28 @@ def _process_dataclass__1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c():
395
454
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
396
455
  setattr(__dataclass__cls, '__delattr__', __delattr__)
397
456
 
457
+ def __hash__(self):
458
+ try:
459
+ return self.__dataclass_hash__
460
+ except AttributeError:
461
+ pass
462
+ object.__setattr__(
463
+ self,
464
+ '__dataclass_hash__',
465
+ h := hash((
466
+ self.v,
467
+ ))
468
+ )
469
+ return h
470
+
471
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
472
+ setattr(__dataclass__cls, '__hash__', __hash__)
473
+
398
474
  def __init__(
399
475
  self,
400
476
  v: __dataclass__init__fields__0__annotation,
401
477
  ) -> __dataclass__None:
402
478
  __dataclass__object_setattr(self, 'v', v)
403
- self.__post_init__()
404
479
 
405
480
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
406
481
  if '__init__' in __dataclass__cls.__dict__:
@@ -427,36 +502,29 @@ def _process_dataclass__1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c():
427
502
 
428
503
  @_register(
429
504
  plan_repr=(
430
- "Plans(tup=(CopyPlan(fields=('multi_key', 'dst')), EqPlan(fields=('multi_key', 'dst')), FrozenPlan(fields=('mul"
431
- "ti_key', 'dst'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('multi_key', 'dst'), cache="
432
- "True), InitPlan(fields=(InitPlan.Field(name='multi_key', annotation=OpRef(name='init.fields.0.annotation'), de"
433
- "fault=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, valid"
434
- "ate=OpRef(name='init.fields.0.validate'), check_type=None), InitPlan.Field(name='dst', annotation=OpRef(name='"
435
- "init.fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldTyp"
436
- "e.INSTANCE, coerce=OpRef(name='init.fields.1.coerce'), validate=None, check_type=None)), self_param='self', st"
437
- "d_params=('multi_key', 'dst'), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), "
438
- "validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='multi_key', kw_only=False, fn=None), ReprPlan.Field(na"
439
- "me='dst', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
505
+ "Plans(tup=(CopyPlan(fields=('ty',)), EqPlan(fields=('ty',)), FrozenPlan(fields=('ty',), allow_dynamic_dunder_a"
506
+ "ttrs=False), HashPlan(action='add', fields=('ty',), cache=True), InitPlan(fields=(InitPlan.Field(name='ty', an"
507
+ "notation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False"
508
+ ", field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None),),"
509
+ " self_param='self', std_params=('ty',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, in"
510
+ "it_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='ty', kw_only=False, fn=None),), id=False, t"
511
+ "erse=False, default_fn=None)))"
440
512
  ),
441
- plan_repr_sha1='1ba38fd546769fabc04fa41bd279c7fcbbad22f2',
513
+ plan_repr_sha1='d152f7efec7ea241cf364f9c170bbe40950b82d9',
442
514
  op_ref_idents=(
443
515
  '__dataclass__init__fields__0__annotation',
444
- '__dataclass__init__fields__0__validate',
445
- '__dataclass__init__fields__1__annotation',
446
- '__dataclass__init__fields__1__coerce',
516
+ '__dataclass__init__fields__0__coerce',
447
517
  ),
448
518
  cls_names=(
449
- ('omlish.inject.multis', 'SetBinding'),
519
+ ('omlish.inject.binder', 'CtorProvider'),
450
520
  ),
451
521
  )
452
- def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
522
+ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
453
523
  def _process_dataclass(
454
524
  *,
455
525
  __dataclass__cls,
456
526
  __dataclass__init__fields__0__annotation,
457
- __dataclass__init__fields__0__validate,
458
- __dataclass__init__fields__1__annotation,
459
- __dataclass__init__fields__1__coerce,
527
+ __dataclass__init__fields__0__coerce,
460
528
  __dataclass__FieldFnValidationError, # noqa
461
529
  __dataclass__FieldTypeValidationError, # noqa
462
530
  __dataclass__FnValidationError, # noqa
@@ -475,8 +543,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
475
543
  if self.__class__ is not __dataclass__cls:
476
544
  raise TypeError(self)
477
545
  return __dataclass__cls( # noqa
478
- multi_key=self.multi_key,
479
- dst=self.dst,
546
+ ty=self.ty,
480
547
  )
481
548
 
482
549
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -490,8 +557,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
490
557
  if self.__class__ is not other.__class__:
491
558
  return NotImplemented
492
559
  return (
493
- self.multi_key == other.multi_key and
494
- self.dst == other.dst
560
+ self.ty == other.ty
495
561
  )
496
562
 
497
563
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -500,8 +566,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
500
566
  setattr(__dataclass__cls, '__eq__', __eq__)
501
567
 
502
568
  __dataclass___setattr_frozen_fields = {
503
- 'multi_key',
504
- 'dst',
569
+ 'ty',
505
570
  }
506
571
 
507
572
  def __setattr__(self, name, value):
@@ -518,8 +583,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
518
583
  setattr(__dataclass__cls, '__setattr__', __setattr__)
519
584
 
520
585
  __dataclass___delattr_frozen_fields = {
521
- 'multi_key',
522
- 'dst',
586
+ 'ty',
523
587
  }
524
588
 
525
589
  def __delattr__(self, name):
@@ -544,8 +608,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
544
608
  self,
545
609
  '__dataclass_hash__',
546
610
  h := hash((
547
- self.multi_key,
548
- self.dst,
611
+ self.ty,
549
612
  ))
550
613
  )
551
614
  return h
@@ -555,20 +618,10 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
555
618
 
556
619
  def __init__(
557
620
  self,
558
- multi_key: __dataclass__init__fields__0__annotation,
559
- dst: __dataclass__init__fields__1__annotation,
621
+ ty: __dataclass__init__fields__0__annotation,
560
622
  ) -> __dataclass__None:
561
- dst = __dataclass__init__fields__1__coerce(dst)
562
- if not __dataclass__init__fields__0__validate(multi_key):
563
- raise __dataclass__FieldFnValidationError(
564
- obj=self,
565
- fn=__dataclass__init__fields__0__validate,
566
- field='multi_key',
567
- value=multi_key,
568
- )
569
- __dataclass__object_setattr(self, 'multi_key', multi_key)
570
- __dataclass__object_setattr(self, 'dst', dst)
571
- self.__post_init__()
623
+ ty = __dataclass__init__fields__0__coerce(ty)
624
+ __dataclass__object_setattr(self, 'ty', ty)
572
625
 
573
626
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
574
627
  if '__init__' in __dataclass__cls.__dict__:
@@ -578,8 +631,7 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
578
631
  @__dataclass___recursive_repr()
579
632
  def __repr__(self):
580
633
  parts = []
581
- parts.append(f"multi_key={self.multi_key!r}")
582
- parts.append(f"dst={self.dst!r}")
634
+ parts.append(f"ty={self.ty!r}")
583
635
  return (
584
636
  f"{self.__class__.__qualname__}("
585
637
  f"{', '.join(parts)}"
@@ -596,34 +648,34 @@ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
596
648
 
597
649
  @_register(
598
650
  plan_repr=(
599
- "Plans(tup=(CopyPlan(fields=('es', 'cs')), EqPlan(fields=('es', 'cs')), FrozenPlan(fields=('es', 'cs'), allow_d"
600
- "ynamic_dunder_attrs=False), HashPlan(action='add', fields=('es', 'cs'), cache=False), InitPlan(fields=(InitPla"
601
- "n.Field(name='es', annotation=OpRef(name='init.fields.0.annotation'), default=OpRef(name='init.fields.0.defaul"
602
- "t'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=Non"
603
- "e, check_type=None), InitPlan.Field(name='cs', annotation=OpRef(name='init.fields.1.annotation'), default=OpRe"
604
- "f(name='init.fields.1.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANC"
605
- "E, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('es', 'cs'), kw_only_params=("
606
- "), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.F"
607
- "ield(name='es', kw_only=False, fn=None), ReprPlan.Field(name='cs', kw_only=False, fn=None)), id=False, terse=F"
608
- "alse, default_fn=None)))"
651
+ "Plans(tup=(CopyPlan(fields=('key', 'priority')), EqPlan(fields=('key', 'priority')), FrozenPlan(fields=('key',"
652
+ " 'priority'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('key', 'priority'), cache=True"
653
+ "), InitPlan(fields=(InitPlan.Field(name='key', annotation=OpRef(name='init.fields.0.annotation'), default=None"
654
+ ", default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fiel"
655
+ "ds.0.coerce'), validate=None, check_type=None), InitPlan.Field(name='priority', annotation=OpRef(name='init.fi"
656
+ "elds.1.annotation'), default=OpRef(name='init.fields.1.default'), default_factory=None, init=True, override=Fa"
657
+ "lse, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_para"
658
+ "ms=('key',), kw_only_params=('priority',), frozen=True, slots=False, post_init_params=(), init_fns=(), validat"
659
+ "e_fns=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=False, fn=None), ReprPlan.Field(name='priority'"
660
+ ", kw_only=True, fn=None)), id=False, terse=False, default_fn=None)))"
609
661
  ),
610
- plan_repr_sha1='20c0436b77a328557ecfbe556539d09e7a50f7bd',
662
+ plan_repr_sha1='c45a09634b0e2a6fa1c4c76e2f691964112b0ddd',
611
663
  op_ref_idents=(
612
664
  '__dataclass__init__fields__0__annotation',
613
- '__dataclass__init__fields__0__default',
665
+ '__dataclass__init__fields__0__coerce',
614
666
  '__dataclass__init__fields__1__annotation',
615
667
  '__dataclass__init__fields__1__default',
616
668
  ),
617
669
  cls_names=(
618
- ('omlish.inject.binder', 'Elements'),
670
+ ('omlish.inject.binder', 'Eager'),
619
671
  ),
620
672
  )
621
- def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
673
+ def _process_dataclass__c45a09634b0e2a6fa1c4c76e2f691964112b0ddd():
622
674
  def _process_dataclass(
623
675
  *,
624
676
  __dataclass__cls,
625
677
  __dataclass__init__fields__0__annotation,
626
- __dataclass__init__fields__0__default,
678
+ __dataclass__init__fields__0__coerce,
627
679
  __dataclass__init__fields__1__annotation,
628
680
  __dataclass__init__fields__1__default,
629
681
  __dataclass__FieldFnValidationError, # noqa
@@ -644,8 +696,8 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
644
696
  if self.__class__ is not __dataclass__cls:
645
697
  raise TypeError(self)
646
698
  return __dataclass__cls( # noqa
647
- es=self.es,
648
- cs=self.cs,
699
+ key=self.key,
700
+ priority=self.priority,
649
701
  )
650
702
 
651
703
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -659,8 +711,8 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
659
711
  if self.__class__ is not other.__class__:
660
712
  return NotImplemented
661
713
  return (
662
- self.es == other.es and
663
- self.cs == other.cs
714
+ self.key == other.key and
715
+ self.priority == other.priority
664
716
  )
665
717
 
666
718
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -669,8 +721,8 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
669
721
  setattr(__dataclass__cls, '__eq__', __eq__)
670
722
 
671
723
  __dataclass___setattr_frozen_fields = {
672
- 'es',
673
- 'cs',
724
+ 'key',
725
+ 'priority',
674
726
  }
675
727
 
676
728
  def __setattr__(self, name, value):
@@ -687,8 +739,8 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
687
739
  setattr(__dataclass__cls, '__setattr__', __setattr__)
688
740
 
689
741
  __dataclass___delattr_frozen_fields = {
690
- 'es',
691
- 'cs',
742
+ 'key',
743
+ 'priority',
692
744
  }
693
745
 
694
746
  def __delattr__(self, name):
@@ -705,21 +757,33 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
705
757
  setattr(__dataclass__cls, '__delattr__', __delattr__)
706
758
 
707
759
  def __hash__(self):
708
- return hash((
709
- self.es,
710
- self.cs,
711
- ))
760
+ try:
761
+ return self.__dataclass_hash__
762
+ except AttributeError:
763
+ pass
764
+ object.__setattr__(
765
+ self,
766
+ '__dataclass_hash__',
767
+ h := hash((
768
+ self.key,
769
+ self.priority,
770
+ ))
771
+ )
772
+ return h
712
773
 
713
774
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
714
775
  setattr(__dataclass__cls, '__hash__', __hash__)
715
776
 
716
777
  def __init__(
717
778
  self,
718
- es: __dataclass__init__fields__0__annotation = __dataclass__init__fields__0__default,
719
- cs: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
779
+ key: __dataclass__init__fields__0__annotation,
780
+ *,
781
+ priority: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
720
782
  ) -> __dataclass__None:
721
- __dataclass__object_setattr(self, 'es', es)
722
- __dataclass__object_setattr(self, 'cs', cs)
783
+ key = __dataclass__init__fields__0__coerce(key)
784
+ __dataclass__object_setattr(self, 'key', key)
785
+ __dataclass__object_setattr(self, 'priority', priority)
786
+ self.__post_init__()
723
787
 
724
788
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
725
789
  if '__init__' in __dataclass__cls.__dict__:
@@ -729,8 +793,8 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
729
793
  @__dataclass___recursive_repr()
730
794
  def __repr__(self):
731
795
  parts = []
732
- parts.append(f"es={self.es!r}")
733
- parts.append(f"cs={self.cs!r}")
796
+ parts.append(f"key={self.key!r}")
797
+ parts.append(f"priority={self.priority!r}")
734
798
  return (
735
799
  f"{self.__class__.__qualname__}("
736
800
  f"{', '.join(parts)}"
@@ -747,26 +811,36 @@ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
747
811
 
748
812
  @_register(
749
813
  plan_repr=(
750
- "Plans(tup=(CopyPlan(fields=('es',)), FrozenPlan(fields=('es',), allow_dynamic_dunder_attrs=False), InitPlan(fi"
751
- "elds=(InitPlan.Field(name='es', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_facto"
752
- "ry=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None"
753
- "),), self_param='self', std_params=('es',), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
754
- ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='es', kw_only=False, fn=None),), id=Fals"
755
- "e, terse=False, default_fn=None)))"
814
+ "Plans(tup=(CopyPlan(fields=('es', 'cs')), EqPlan(fields=('es', 'cs')), FrozenPlan(fields=('es', 'cs'), allow_d"
815
+ "ynamic_dunder_attrs=False), HashPlan(action='add', fields=('es', 'cs'), cache=False), InitPlan(fields=(InitPla"
816
+ "n.Field(name='es', annotation=OpRef(name='init.fields.0.annotation'), default=OpRef(name='init.fields.0.defaul"
817
+ "t'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=Non"
818
+ "e, check_type=None), InitPlan.Field(name='cs', annotation=OpRef(name='init.fields.1.annotation'), default=OpRe"
819
+ "f(name='init.fields.1.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANC"
820
+ "E, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('es', 'cs'), kw_only_params=("
821
+ "), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.F"
822
+ "ield(name='es', kw_only=False, fn=None), ReprPlan.Field(name='cs', kw_only=False, fn=None)), id=False, terse=F"
823
+ "alse, default_fn=None)))"
756
824
  ),
757
- plan_repr_sha1='23940adf5b02820a6f9975e06728e5b58b744320',
825
+ plan_repr_sha1='20c0436b77a328557ecfbe556539d09e7a50f7bd',
758
826
  op_ref_idents=(
759
827
  '__dataclass__init__fields__0__annotation',
828
+ '__dataclass__init__fields__0__default',
829
+ '__dataclass__init__fields__1__annotation',
830
+ '__dataclass__init__fields__1__default',
760
831
  ),
761
832
  cls_names=(
762
- ('omlish.inject.impl.elements', 'MapProviderImpl'),
833
+ ('omlish.inject.binder', 'Elements'),
763
834
  ),
764
835
  )
765
- def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
836
+ def _process_dataclass__20c0436b77a328557ecfbe556539d09e7a50f7bd():
766
837
  def _process_dataclass(
767
838
  *,
768
839
  __dataclass__cls,
769
840
  __dataclass__init__fields__0__annotation,
841
+ __dataclass__init__fields__0__default,
842
+ __dataclass__init__fields__1__annotation,
843
+ __dataclass__init__fields__1__default,
770
844
  __dataclass__FieldFnValidationError, # noqa
771
845
  __dataclass__FieldTypeValidationError, # noqa
772
846
  __dataclass__FnValidationError, # noqa
@@ -786,6 +860,7 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
786
860
  raise TypeError(self)
787
861
  return __dataclass__cls( # noqa
788
862
  es=self.es,
863
+ cs=self.cs,
789
864
  )
790
865
 
791
866
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -793,8 +868,24 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
793
868
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
794
869
  setattr(__dataclass__cls, '__copy__', __copy__)
795
870
 
871
+ def __eq__(self, other):
872
+ if self is other:
873
+ return True
874
+ if self.__class__ is not other.__class__:
875
+ return NotImplemented
876
+ return (
877
+ self.es == other.es and
878
+ self.cs == other.cs
879
+ )
880
+
881
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
882
+ if '__eq__' in __dataclass__cls.__dict__:
883
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
884
+ setattr(__dataclass__cls, '__eq__', __eq__)
885
+
796
886
  __dataclass___setattr_frozen_fields = {
797
887
  'es',
888
+ 'cs',
798
889
  }
799
890
 
800
891
  def __setattr__(self, name, value):
@@ -812,6 +903,7 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
812
903
 
813
904
  __dataclass___delattr_frozen_fields = {
814
905
  'es',
906
+ 'cs',
815
907
  }
816
908
 
817
909
  def __delattr__(self, name):
@@ -827,11 +919,22 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
827
919
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
828
920
  setattr(__dataclass__cls, '__delattr__', __delattr__)
829
921
 
922
+ def __hash__(self):
923
+ return hash((
924
+ self.es,
925
+ self.cs,
926
+ ))
927
+
928
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
929
+ setattr(__dataclass__cls, '__hash__', __hash__)
930
+
830
931
  def __init__(
831
932
  self,
832
- es: __dataclass__init__fields__0__annotation,
933
+ es: __dataclass__init__fields__0__annotation = __dataclass__init__fields__0__default,
934
+ cs: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
833
935
  ) -> __dataclass__None:
834
936
  __dataclass__object_setattr(self, 'es', es)
937
+ __dataclass__object_setattr(self, 'cs', cs)
835
938
 
836
939
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
837
940
  if '__init__' in __dataclass__cls.__dict__:
@@ -842,6 +945,7 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
842
945
  def __repr__(self):
843
946
  parts = []
844
947
  parts.append(f"es={self.es!r}")
948
+ parts.append(f"cs={self.cs!r}")
845
949
  return (
846
950
  f"{self.__class__.__qualname__}("
847
951
  f"{', '.join(parts)}"
@@ -858,28 +962,29 @@ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
858
962
 
859
963
  @_register(
860
964
  plan_repr=(
861
- "Plans(tup=(CopyPlan(fields=('p',)), FrozenPlan(fields=('p',), allow_dynamic_dunder_attrs=False), InitPlan(fiel"
862
- "ds=(InitPlan.Field(name='p', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory="
863
- "None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),)"
864
- ", self_param='self', std_params=('p',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, in"
865
- "it_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='p', kw_only=False, fn=None),), id=False, te"
866
- "rse=False, default_fn=None)))"
965
+ "Plans(tup=(CopyPlan(fields=('key',)), EqPlan(fields=('key',)), FrozenPlan(fields=('key',), allow_dynamic_dunde"
966
+ "r_attrs=False), HashPlan(action='add', fields=('key',), cache=True), InitPlan(fields=(InitPlan.Field(name='key"
967
+ "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
968
+ "False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=Non"
969
+ "e),), self_param='self', std_params=('key',), kw_only_params=(), frozen=True, slots=False, post_init_params=()"
970
+ ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=False, fn=None),), id=Fal"
971
+ "se, terse=False, default_fn=None)))"
867
972
  ),
868
- plan_repr_sha1='365eedd17dff52bfa369a9578066fd43141c41fd',
973
+ plan_repr_sha1='95e8d2726657f6c6d0abe6bace53f80710e3d314',
869
974
  op_ref_idents=(
870
975
  '__dataclass__init__fields__0__annotation',
976
+ '__dataclass__init__fields__0__coerce',
871
977
  ),
872
978
  cls_names=(
873
- ('omlish.inject.impl.bindings', 'ConstProviderImpl'),
874
- ('omlish.inject.impl.bindings', 'LinkProviderImpl'),
875
- ('omlish.inject.impl.elements', 'ScopeSeededProviderImpl'),
979
+ ('omlish.inject.binder', 'Expose'),
876
980
  ),
877
981
  )
878
- def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
982
+ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
879
983
  def _process_dataclass(
880
984
  *,
881
985
  __dataclass__cls,
882
986
  __dataclass__init__fields__0__annotation,
987
+ __dataclass__init__fields__0__coerce,
883
988
  __dataclass__FieldFnValidationError, # noqa
884
989
  __dataclass__FieldTypeValidationError, # noqa
885
990
  __dataclass__FnValidationError, # noqa
@@ -898,7 +1003,7 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
898
1003
  if self.__class__ is not __dataclass__cls:
899
1004
  raise TypeError(self)
900
1005
  return __dataclass__cls( # noqa
901
- p=self.p,
1006
+ key=self.key,
902
1007
  )
903
1008
 
904
1009
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -906,8 +1011,22 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
906
1011
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
907
1012
  setattr(__dataclass__cls, '__copy__', __copy__)
908
1013
 
1014
+ def __eq__(self, other):
1015
+ if self is other:
1016
+ return True
1017
+ if self.__class__ is not other.__class__:
1018
+ return NotImplemented
1019
+ return (
1020
+ self.key == other.key
1021
+ )
1022
+
1023
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
1024
+ if '__eq__' in __dataclass__cls.__dict__:
1025
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
1026
+ setattr(__dataclass__cls, '__eq__', __eq__)
1027
+
909
1028
  __dataclass___setattr_frozen_fields = {
910
- 'p',
1029
+ 'key',
911
1030
  }
912
1031
 
913
1032
  def __setattr__(self, name, value):
@@ -924,7 +1043,7 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
924
1043
  setattr(__dataclass__cls, '__setattr__', __setattr__)
925
1044
 
926
1045
  __dataclass___delattr_frozen_fields = {
927
- 'p',
1046
+ 'key',
928
1047
  }
929
1048
 
930
1049
  def __delattr__(self, name):
@@ -940,11 +1059,30 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
940
1059
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
941
1060
  setattr(__dataclass__cls, '__delattr__', __delattr__)
942
1061
 
1062
+ def __hash__(self):
1063
+ try:
1064
+ return self.__dataclass_hash__
1065
+ except AttributeError:
1066
+ pass
1067
+ object.__setattr__(
1068
+ self,
1069
+ '__dataclass_hash__',
1070
+ h := hash((
1071
+ self.key,
1072
+ ))
1073
+ )
1074
+ return h
1075
+
1076
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
1077
+ setattr(__dataclass__cls, '__hash__', __hash__)
1078
+
943
1079
  def __init__(
944
1080
  self,
945
- p: __dataclass__init__fields__0__annotation,
1081
+ key: __dataclass__init__fields__0__annotation,
946
1082
  ) -> __dataclass__None:
947
- __dataclass__object_setattr(self, 'p', p)
1083
+ key = __dataclass__init__fields__0__coerce(key)
1084
+ __dataclass__object_setattr(self, 'key', key)
1085
+ self.__post_init__()
948
1086
 
949
1087
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
950
1088
  if '__init__' in __dataclass__cls.__dict__:
@@ -954,7 +1092,7 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
954
1092
  @__dataclass___recursive_repr()
955
1093
  def __repr__(self):
956
1094
  parts = []
957
- parts.append(f"p={self.p!r}")
1095
+ parts.append(f"key={self.key!r}")
958
1096
  return (
959
1097
  f"{self.__class__.__qualname__}("
960
1098
  f"{', '.join(parts)}"
@@ -971,29 +1109,40 @@ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
971
1109
 
972
1110
  @_register(
973
1111
  plan_repr=(
974
- "Plans(tup=(CopyPlan(fields=('k',)), EqPlan(fields=('k',)), FrozenPlan(fields=('k',), allow_dynamic_dunder_attr"
975
- "s=False), HashPlan(action='add', fields=('k',), cache=True), InitPlan(fields=(InitPlan.Field(name='k', annotat"
976
- "ion=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, fie"
977
- "ld_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None),), self"
978
- "_param='self', std_params=('k',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns"
979
- "=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='k', kw_only=False, fn=None),), id=False, terse=Fa"
980
- "lse, default_fn=None)))"
1112
+ "Plans(tup=(CopyPlan(fields=('ty', 'tag')), EqPlan(fields=('ty', 'tag')), FrozenPlan(fields=('ty', 'tag'), allo"
1113
+ "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ty', 'tag'), cache=True), InitPlan(fields=(Init"
1114
+ "Plan.Field(name='ty', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, i"
1115
+ "nit=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=N"
1116
+ "one, check_type=None), InitPlan.Field(name='tag', annotation=OpRef(name='init.fields.1.annotation'), default=O"
1117
+ "pRef(name='init.fields.1.default'), default_factory=None, init=True, override=False, field_type=FieldType.INST"
1118
+ "ANCE, coerce=None, validate=OpRef(name='init.fields.1.validate'), check_type=None)), self_param='self', std_pa"
1119
+ "rams=('ty',), kw_only_params=('tag',), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_"
1120
+ "fns=()), ReprPlan(fields=(ReprPlan.Field(name='ty', kw_only=False, fn=None), ReprPlan.Field(name='tag', kw_onl"
1121
+ "y=True, fn=OpRef(name='repr.fns.1.fn'))), id=False, terse=True, default_fn=None)))"
981
1122
  ),
982
- plan_repr_sha1='399a0f677e522382f8e81b442490afcfdd485c6a',
1123
+ plan_repr_sha1='e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2',
983
1124
  op_ref_idents=(
984
1125
  '__dataclass__init__fields__0__annotation',
985
1126
  '__dataclass__init__fields__0__coerce',
1127
+ '__dataclass__init__fields__1__annotation',
1128
+ '__dataclass__init__fields__1__default',
1129
+ '__dataclass__init__fields__1__validate',
1130
+ '__dataclass__repr__fns__1__fn',
986
1131
  ),
987
1132
  cls_names=(
988
- ('omlish.inject.binder', 'LinkProvider'),
1133
+ ('omlish.inject.binder', 'Key'),
989
1134
  ),
990
1135
  )
991
- def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1136
+ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
992
1137
  def _process_dataclass(
993
1138
  *,
994
1139
  __dataclass__cls,
995
1140
  __dataclass__init__fields__0__annotation,
996
1141
  __dataclass__init__fields__0__coerce,
1142
+ __dataclass__init__fields__1__annotation,
1143
+ __dataclass__init__fields__1__default,
1144
+ __dataclass__init__fields__1__validate,
1145
+ __dataclass__repr__fns__1__fn,
997
1146
  __dataclass__FieldFnValidationError, # noqa
998
1147
  __dataclass__FieldTypeValidationError, # noqa
999
1148
  __dataclass__FnValidationError, # noqa
@@ -1012,7 +1161,8 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1012
1161
  if self.__class__ is not __dataclass__cls:
1013
1162
  raise TypeError(self)
1014
1163
  return __dataclass__cls( # noqa
1015
- k=self.k,
1164
+ ty=self.ty,
1165
+ tag=self.tag,
1016
1166
  )
1017
1167
 
1018
1168
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -1026,7 +1176,8 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1026
1176
  if self.__class__ is not other.__class__:
1027
1177
  return NotImplemented
1028
1178
  return (
1029
- self.k == other.k
1179
+ self.ty == other.ty and
1180
+ self.tag == other.tag
1030
1181
  )
1031
1182
 
1032
1183
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -1035,7 +1186,8 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1035
1186
  setattr(__dataclass__cls, '__eq__', __eq__)
1036
1187
 
1037
1188
  __dataclass___setattr_frozen_fields = {
1038
- 'k',
1189
+ 'ty',
1190
+ 'tag',
1039
1191
  }
1040
1192
 
1041
1193
  def __setattr__(self, name, value):
@@ -1052,7 +1204,8 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1052
1204
  setattr(__dataclass__cls, '__setattr__', __setattr__)
1053
1205
 
1054
1206
  __dataclass___delattr_frozen_fields = {
1055
- 'k',
1207
+ 'ty',
1208
+ 'tag',
1056
1209
  }
1057
1210
 
1058
1211
  def __delattr__(self, name):
@@ -1077,7 +1230,8 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1077
1230
  self,
1078
1231
  '__dataclass_hash__',
1079
1232
  h := hash((
1080
- self.k,
1233
+ self.ty,
1234
+ self.tag,
1081
1235
  ))
1082
1236
  )
1083
1237
  return h
@@ -1087,10 +1241,20 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1087
1241
 
1088
1242
  def __init__(
1089
1243
  self,
1090
- k: __dataclass__init__fields__0__annotation,
1244
+ ty: __dataclass__init__fields__0__annotation,
1245
+ *,
1246
+ tag: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
1091
1247
  ) -> __dataclass__None:
1092
- k = __dataclass__init__fields__0__coerce(k)
1093
- __dataclass__object_setattr(self, 'k', k)
1248
+ ty = __dataclass__init__fields__0__coerce(ty)
1249
+ if not __dataclass__init__fields__1__validate(tag):
1250
+ raise __dataclass__FieldFnValidationError(
1251
+ obj=self,
1252
+ fn=__dataclass__init__fields__1__validate,
1253
+ field='tag',
1254
+ value=tag,
1255
+ )
1256
+ __dataclass__object_setattr(self, 'ty', ty)
1257
+ __dataclass__object_setattr(self, 'tag', tag)
1094
1258
 
1095
1259
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
1096
1260
  if '__init__' in __dataclass__cls.__dict__:
@@ -1100,7 +1264,9 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1100
1264
  @__dataclass___recursive_repr()
1101
1265
  def __repr__(self):
1102
1266
  parts = []
1103
- parts.append(f"k={self.k!r}")
1267
+ parts.append(f"{self.ty!r}")
1268
+ if (s := __dataclass__repr__fns__1__fn(self.tag)) is not None:
1269
+ parts.append(f"tag={s}")
1104
1270
  return (
1105
1271
  f"{self.__class__.__qualname__}("
1106
1272
  f"{', '.join(parts)}"
@@ -1117,45 +1283,29 @@ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1117
1283
 
1118
1284
  @_register(
1119
1285
  plan_repr=(
1120
- "Plans(tup=(CopyPlan(fields=('key', 'provider', 'scope', 'binding')), FrozenPlan(fields=('key', 'provider', 'sc"
1121
- "ope', 'binding'), allow_dynamic_dunder_attrs=False), InitPlan(fields=(InitPlan.Field(name='key', annotation=Op"
1122
- "Ref(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_typ"
1123
- "e=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='provider', annotation"
1124
- "=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_"
1125
- "type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='scope', annotation"
1126
- "=OpRef(name='init.fields.2.annotation'), default=OpRef(name='init.fields.2.default'), default_factory=None, in"
1127
- "it=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan"
1128
- ".Field(name='binding', annotation=OpRef(name='init.fields.3.annotation'), default=OpRef(name='init.fields.3.de"
1129
- "fault'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate"
1130
- "=None, check_type=None)), self_param='self', std_params=('key', 'provider', 'scope', 'binding'), kw_only_param"
1131
- "s=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPla"
1132
- "n.Field(name='key', kw_only=False, fn=None), ReprPlan.Field(name='provider', kw_only=False, fn=None), ReprPlan"
1133
- ".Field(name='scope', kw_only=False, fn=None), ReprPlan.Field(name='binding', kw_only=False, fn=None)), id=Fals"
1134
- "e, terse=False, default_fn=None)))"
1286
+ "Plans(tup=(CopyPlan(fields=('k',)), EqPlan(fields=('k',)), FrozenPlan(fields=('k',), allow_dynamic_dunder_attr"
1287
+ "s=False), HashPlan(action='add', fields=('k',), cache=True), InitPlan(fields=(InitPlan.Field(name='k', annotat"
1288
+ "ion=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, fie"
1289
+ "ld_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None),), self"
1290
+ "_param='self', std_params=('k',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns"
1291
+ "=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='k', kw_only=False, fn=None),), id=False, terse=Fa"
1292
+ "lse, default_fn=None)))"
1135
1293
  ),
1136
- plan_repr_sha1='3ea053d1a1090718f9d29a7824558f2ca9a77e31',
1294
+ plan_repr_sha1='399a0f677e522382f8e81b442490afcfdd485c6a',
1137
1295
  op_ref_idents=(
1138
1296
  '__dataclass__init__fields__0__annotation',
1139
- '__dataclass__init__fields__1__annotation',
1140
- '__dataclass__init__fields__2__annotation',
1141
- '__dataclass__init__fields__2__default',
1142
- '__dataclass__init__fields__3__annotation',
1143
- '__dataclass__init__fields__3__default',
1297
+ '__dataclass__init__fields__0__coerce',
1144
1298
  ),
1145
1299
  cls_names=(
1146
- ('omlish.inject.impl.bindings', 'BindingImpl'),
1300
+ ('omlish.inject.binder', 'LinkProvider'),
1147
1301
  ),
1148
1302
  )
1149
- def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1303
+ def _process_dataclass__399a0f677e522382f8e81b442490afcfdd485c6a():
1150
1304
  def _process_dataclass(
1151
1305
  *,
1152
1306
  __dataclass__cls,
1153
1307
  __dataclass__init__fields__0__annotation,
1154
- __dataclass__init__fields__1__annotation,
1155
- __dataclass__init__fields__2__annotation,
1156
- __dataclass__init__fields__2__default,
1157
- __dataclass__init__fields__3__annotation,
1158
- __dataclass__init__fields__3__default,
1308
+ __dataclass__init__fields__0__coerce,
1159
1309
  __dataclass__FieldFnValidationError, # noqa
1160
1310
  __dataclass__FieldTypeValidationError, # noqa
1161
1311
  __dataclass__FnValidationError, # noqa
@@ -1174,10 +1324,7 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1174
1324
  if self.__class__ is not __dataclass__cls:
1175
1325
  raise TypeError(self)
1176
1326
  return __dataclass__cls( # noqa
1177
- key=self.key,
1178
- provider=self.provider,
1179
- scope=self.scope,
1180
- binding=self.binding,
1327
+ k=self.k,
1181
1328
  )
1182
1329
 
1183
1330
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -1185,11 +1332,22 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1185
1332
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
1186
1333
  setattr(__dataclass__cls, '__copy__', __copy__)
1187
1334
 
1335
+ def __eq__(self, other):
1336
+ if self is other:
1337
+ return True
1338
+ if self.__class__ is not other.__class__:
1339
+ return NotImplemented
1340
+ return (
1341
+ self.k == other.k
1342
+ )
1343
+
1344
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
1345
+ if '__eq__' in __dataclass__cls.__dict__:
1346
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
1347
+ setattr(__dataclass__cls, '__eq__', __eq__)
1348
+
1188
1349
  __dataclass___setattr_frozen_fields = {
1189
- 'key',
1190
- 'provider',
1191
- 'scope',
1192
- 'binding',
1350
+ 'k',
1193
1351
  }
1194
1352
 
1195
1353
  def __setattr__(self, name, value):
@@ -1206,10 +1364,7 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1206
1364
  setattr(__dataclass__cls, '__setattr__', __setattr__)
1207
1365
 
1208
1366
  __dataclass___delattr_frozen_fields = {
1209
- 'key',
1210
- 'provider',
1211
- 'scope',
1212
- 'binding',
1367
+ 'k',
1213
1368
  }
1214
1369
 
1215
1370
  def __delattr__(self, name):
@@ -1225,17 +1380,29 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1225
1380
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
1226
1381
  setattr(__dataclass__cls, '__delattr__', __delattr__)
1227
1382
 
1383
+ def __hash__(self):
1384
+ try:
1385
+ return self.__dataclass_hash__
1386
+ except AttributeError:
1387
+ pass
1388
+ object.__setattr__(
1389
+ self,
1390
+ '__dataclass_hash__',
1391
+ h := hash((
1392
+ self.k,
1393
+ ))
1394
+ )
1395
+ return h
1396
+
1397
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
1398
+ setattr(__dataclass__cls, '__hash__', __hash__)
1399
+
1228
1400
  def __init__(
1229
1401
  self,
1230
- key: __dataclass__init__fields__0__annotation,
1231
- provider: __dataclass__init__fields__1__annotation,
1232
- scope: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
1233
- binding: __dataclass__init__fields__3__annotation = __dataclass__init__fields__3__default,
1402
+ k: __dataclass__init__fields__0__annotation,
1234
1403
  ) -> __dataclass__None:
1235
- __dataclass__object_setattr(self, 'key', key)
1236
- __dataclass__object_setattr(self, 'provider', provider)
1237
- __dataclass__object_setattr(self, 'scope', scope)
1238
- __dataclass__object_setattr(self, 'binding', binding)
1404
+ k = __dataclass__init__fields__0__coerce(k)
1405
+ __dataclass__object_setattr(self, 'k', k)
1239
1406
 
1240
1407
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
1241
1408
  if '__init__' in __dataclass__cls.__dict__:
@@ -1245,10 +1412,7 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1245
1412
  @__dataclass___recursive_repr()
1246
1413
  def __repr__(self):
1247
1414
  parts = []
1248
- parts.append(f"key={self.key!r}")
1249
- parts.append(f"provider={self.provider!r}")
1250
- parts.append(f"scope={self.scope!r}")
1251
- parts.append(f"binding={self.binding!r}")
1415
+ parts.append(f"k={self.k!r}")
1252
1416
  return (
1253
1417
  f"{self.__class__.__qualname__}("
1254
1418
  f"{', '.join(parts)}"
@@ -1265,22 +1429,24 @@ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
1265
1429
 
1266
1430
  @_register(
1267
1431
  plan_repr=(
1268
- "Plans(tup=(CopyPlan(fields=('v',)), EqPlan(fields=('v',)), FrozenPlan(fields=('v',), allow_dynamic_dunder_attr"
1269
- "s=False), HashPlan(action='add', fields=('v',), cache=True), InitPlan(fields=(InitPlan.Field(name='v', annotat"
1270
- "ion=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, fie"
1271
- "ld_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),), self_param='self', std_params=('v'"
1272
- ",), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPla"
1273
- "n(fields=(ReprPlan.Field(name='v', kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
1432
+ "Plans(tup=(CopyPlan(fields=('lst',)), EqPlan(fields=('lst',)), FrozenPlan(fields=('lst',), allow_dynamic_dunde"
1433
+ "r_attrs=False), HashPlan(action='add', fields=('lst',), cache=True), InitPlan(fields=(InitPlan.Field(name='lst"
1434
+ "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
1435
+ "False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),), self_param='self', std_p"
1436
+ "arams=('lst',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns="
1437
+ "()), ReprPlan(fields=(ReprPlan.Field(name='lst', kw_only=False, fn=None),), id=False, terse=False, default_fn="
1438
+ "None)))"
1274
1439
  ),
1275
- plan_repr_sha1='454972cdb0715dc22365cb0a504288ac36355c45',
1440
+ plan_repr_sha1='d1633dcd9bb962f0e548a4a63b764b808cdac621',
1276
1441
  op_ref_idents=(
1277
1442
  '__dataclass__init__fields__0__annotation',
1278
1443
  ),
1279
1444
  cls_names=(
1280
- ('omlish.inject.binder', 'ConstProvider'),
1445
+ ('omlish.inject.binder', 'Origin'),
1446
+ ('omlish.inject.binder', 'Origins'),
1281
1447
  ),
1282
1448
  )
1283
- def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1449
+ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
1284
1450
  def _process_dataclass(
1285
1451
  *,
1286
1452
  __dataclass__cls,
@@ -1303,7 +1469,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1303
1469
  if self.__class__ is not __dataclass__cls:
1304
1470
  raise TypeError(self)
1305
1471
  return __dataclass__cls( # noqa
1306
- v=self.v,
1472
+ lst=self.lst,
1307
1473
  )
1308
1474
 
1309
1475
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -1317,7 +1483,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1317
1483
  if self.__class__ is not other.__class__:
1318
1484
  return NotImplemented
1319
1485
  return (
1320
- self.v == other.v
1486
+ self.lst == other.lst
1321
1487
  )
1322
1488
 
1323
1489
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -1326,7 +1492,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1326
1492
  setattr(__dataclass__cls, '__eq__', __eq__)
1327
1493
 
1328
1494
  __dataclass___setattr_frozen_fields = {
1329
- 'v',
1495
+ 'lst',
1330
1496
  }
1331
1497
 
1332
1498
  def __setattr__(self, name, value):
@@ -1343,7 +1509,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1343
1509
  setattr(__dataclass__cls, '__setattr__', __setattr__)
1344
1510
 
1345
1511
  __dataclass___delattr_frozen_fields = {
1346
- 'v',
1512
+ 'lst',
1347
1513
  }
1348
1514
 
1349
1515
  def __delattr__(self, name):
@@ -1368,7 +1534,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1368
1534
  self,
1369
1535
  '__dataclass_hash__',
1370
1536
  h := hash((
1371
- self.v,
1537
+ self.lst,
1372
1538
  ))
1373
1539
  )
1374
1540
  return h
@@ -1378,9 +1544,9 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1378
1544
 
1379
1545
  def __init__(
1380
1546
  self,
1381
- v: __dataclass__init__fields__0__annotation,
1547
+ lst: __dataclass__init__fields__0__annotation,
1382
1548
  ) -> __dataclass__None:
1383
- __dataclass__object_setattr(self, 'v', v)
1549
+ __dataclass__object_setattr(self, 'lst', lst)
1384
1550
 
1385
1551
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
1386
1552
  if '__init__' in __dataclass__cls.__dict__:
@@ -1390,7 +1556,7 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1390
1556
  @__dataclass___recursive_repr()
1391
1557
  def __repr__(self):
1392
1558
  parts = []
1393
- parts.append(f"v={self.v!r}")
1559
+ parts.append(f"lst={self.lst!r}")
1394
1560
  return (
1395
1561
  f"{self.__class__.__qualname__}("
1396
1562
  f"{', '.join(parts)}"
@@ -1407,30 +1573,29 @@ def _process_dataclass__454972cdb0715dc22365cb0a504288ac36355c45():
1407
1573
 
1408
1574
  @_register(
1409
1575
  plan_repr=(
1410
- "Plans(tup=(CopyPlan(fields=('fn',)), EqPlan(fields=('fn',)), FrozenPlan(fields=('fn',), allow_dynamic_dunder_a"
1411
- "ttrs=False), HashPlan(action='add', fields=('fn',), cache=True), InitPlan(fields=(InitPlan.Field(name='fn', an"
1412
- "notation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False"
1413
- ", field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fields.0.validate'), check_type=None),"
1414
- "), self_param='self', std_params=('fn',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, "
1415
- "init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='fn', kw_only=False, fn=None),), id=False,"
1416
- " terse=False, default_fn=None)))"
1576
+ "Plans(tup=(CopyPlan(fields=('elements',)), EqPlan(fields=('elements',)), FrozenPlan(fields=('elements',), allo"
1577
+ "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('elements',), cache=True), InitPlan(fields=(Init"
1578
+ "Plan.Field(name='elements', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=N"
1579
+ "one, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), vali"
1580
+ "date=None, check_type=None),), self_param='self', std_params=('elements',), kw_only_params=(), frozen=True, sl"
1581
+ "ots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='elements'"
1582
+ ", kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
1417
1583
  ),
1418
- plan_repr_sha1='465d8361a14bec38d3a20f2ef3aaeaed5cd23067',
1584
+ plan_repr_sha1='8b45b0d38754c357aabee0be30419e40d1746bc4',
1419
1585
  op_ref_idents=(
1420
1586
  '__dataclass__init__fields__0__annotation',
1421
- '__dataclass__init__fields__0__validate',
1587
+ '__dataclass__init__fields__0__coerce',
1422
1588
  ),
1423
1589
  cls_names=(
1424
- ('omlish.inject.binder', 'AsyncFnProvider'),
1425
- ('omlish.inject.binder', 'FnProvider'),
1590
+ ('omlish.inject.binder', 'Private'),
1426
1591
  ),
1427
1592
  )
1428
- def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1593
+ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
1429
1594
  def _process_dataclass(
1430
1595
  *,
1431
1596
  __dataclass__cls,
1432
1597
  __dataclass__init__fields__0__annotation,
1433
- __dataclass__init__fields__0__validate,
1598
+ __dataclass__init__fields__0__coerce,
1434
1599
  __dataclass__FieldFnValidationError, # noqa
1435
1600
  __dataclass__FieldTypeValidationError, # noqa
1436
1601
  __dataclass__FnValidationError, # noqa
@@ -1449,7 +1614,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1449
1614
  if self.__class__ is not __dataclass__cls:
1450
1615
  raise TypeError(self)
1451
1616
  return __dataclass__cls( # noqa
1452
- fn=self.fn,
1617
+ elements=self.elements,
1453
1618
  )
1454
1619
 
1455
1620
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -1463,7 +1628,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1463
1628
  if self.__class__ is not other.__class__:
1464
1629
  return NotImplemented
1465
1630
  return (
1466
- self.fn == other.fn
1631
+ self.elements == other.elements
1467
1632
  )
1468
1633
 
1469
1634
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -1472,7 +1637,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1472
1637
  setattr(__dataclass__cls, '__eq__', __eq__)
1473
1638
 
1474
1639
  __dataclass___setattr_frozen_fields = {
1475
- 'fn',
1640
+ 'elements',
1476
1641
  }
1477
1642
 
1478
1643
  def __setattr__(self, name, value):
@@ -1489,7 +1654,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1489
1654
  setattr(__dataclass__cls, '__setattr__', __setattr__)
1490
1655
 
1491
1656
  __dataclass___delattr_frozen_fields = {
1492
- 'fn',
1657
+ 'elements',
1493
1658
  }
1494
1659
 
1495
1660
  def __delattr__(self, name):
@@ -1514,7 +1679,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1514
1679
  self,
1515
1680
  '__dataclass_hash__',
1516
1681
  h := hash((
1517
- self.fn,
1682
+ self.elements,
1518
1683
  ))
1519
1684
  )
1520
1685
  return h
@@ -1524,16 +1689,11 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1524
1689
 
1525
1690
  def __init__(
1526
1691
  self,
1527
- fn: __dataclass__init__fields__0__annotation,
1692
+ elements: __dataclass__init__fields__0__annotation,
1528
1693
  ) -> __dataclass__None:
1529
- if not __dataclass__init__fields__0__validate(fn):
1530
- raise __dataclass__FieldFnValidationError(
1531
- obj=self,
1532
- fn=__dataclass__init__fields__0__validate,
1533
- field='fn',
1534
- value=fn,
1535
- )
1536
- __dataclass__object_setattr(self, 'fn', fn)
1694
+ elements = __dataclass__init__fields__0__coerce(elements)
1695
+ __dataclass__object_setattr(self, 'elements', elements)
1696
+ self.__post_init__()
1537
1697
 
1538
1698
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
1539
1699
  if '__init__' in __dataclass__cls.__dict__:
@@ -1543,7 +1703,7 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1543
1703
  @__dataclass___recursive_repr()
1544
1704
  def __repr__(self):
1545
1705
  parts = []
1546
- parts.append(f"fn={self.fn!r}")
1706
+ parts.append(f"elements={self.elements!r}")
1547
1707
  return (
1548
1708
  f"{self.__class__.__qualname__}("
1549
1709
  f"{', '.join(parts)}"
@@ -1560,46 +1720,29 @@ def _process_dataclass__465d8361a14bec38d3a20f2ef3aaeaed5cd23067():
1560
1720
 
1561
1721
  @_register(
1562
1722
  plan_repr=(
1563
- "Plans(tup=(CopyPlan(fields=('key', 'provider', 'scope')), EqPlan(fields=('key', 'provider', 'scope')), FrozenP"
1564
- "lan(fields=('key', 'provider', 'scope'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ke"
1565
- "y', 'provider', 'scope'), cache=True), InitPlan(fields=(InitPlan.Field(name='key', annotation=OpRef(name='init"
1566
- ".fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.IN"
1567
- "STANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None), InitPlan.Field(name='provi"
1568
- "der', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None, init=True, overri"
1569
- "de=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.1.coerce'), validate=None, check_type="
1570
- "None), InitPlan.Field(name='scope', annotation=OpRef(name='init.fields.2.annotation'), default=OpRef(name='ini"
1571
- "t.fields.2.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=O"
1572
- "pRef(name='init.fields.2.coerce'), validate=None, check_type=None)), self_param='self', std_params=('key', 'pr"
1573
- "ovider', 'scope'), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), validate_fns"
1574
- "=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=False, fn=None), ReprPlan.Field(name='provider', kw_"
1575
- "only=False, fn=None), ReprPlan.Field(name='scope', kw_only=False, fn=None)), id=False, terse=False, default_fn"
1576
- "=None)))"
1723
+ "Plans(tup=(CopyPlan(fields=('scope',)), EqPlan(fields=('scope',)), FrozenPlan(fields=('scope',), allow_dynamic"
1724
+ "_dunder_attrs=False), HashPlan(action='add', fields=('scope',), cache=True), InitPlan(fields=(InitPlan.Field(n"
1725
+ "ame='scope', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True,"
1726
+ " override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, chec"
1727
+ "k_type=None),), self_param='self', std_params=('scope',), kw_only_params=(), frozen=True, slots=False, post_in"
1728
+ "it_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='scope', kw_only=False, fn=N"
1729
+ "one),), id=False, terse=False, default_fn=None)))"
1577
1730
  ),
1578
- plan_repr_sha1='46c59d586838c9ad0bfaea00944f56523114cba1',
1731
+ plan_repr_sha1='a01535be51a62c3aedc3529e0204c6135d8d9e99',
1579
1732
  op_ref_idents=(
1580
1733
  '__dataclass__init__fields__0__annotation',
1581
1734
  '__dataclass__init__fields__0__coerce',
1582
- '__dataclass__init__fields__1__annotation',
1583
- '__dataclass__init__fields__1__coerce',
1584
- '__dataclass__init__fields__2__annotation',
1585
- '__dataclass__init__fields__2__coerce',
1586
- '__dataclass__init__fields__2__default',
1587
1735
  ),
1588
1736
  cls_names=(
1589
- ('omlish.inject.binder', 'Binding'),
1737
+ ('omlish.inject.binder', 'ScopeBinding'),
1590
1738
  ),
1591
1739
  )
1592
- def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1740
+ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
1593
1741
  def _process_dataclass(
1594
1742
  *,
1595
1743
  __dataclass__cls,
1596
1744
  __dataclass__init__fields__0__annotation,
1597
1745
  __dataclass__init__fields__0__coerce,
1598
- __dataclass__init__fields__1__annotation,
1599
- __dataclass__init__fields__1__coerce,
1600
- __dataclass__init__fields__2__annotation,
1601
- __dataclass__init__fields__2__coerce,
1602
- __dataclass__init__fields__2__default,
1603
1746
  __dataclass__FieldFnValidationError, # noqa
1604
1747
  __dataclass__FieldTypeValidationError, # noqa
1605
1748
  __dataclass__FnValidationError, # noqa
@@ -1618,8 +1761,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1618
1761
  if self.__class__ is not __dataclass__cls:
1619
1762
  raise TypeError(self)
1620
1763
  return __dataclass__cls( # noqa
1621
- key=self.key,
1622
- provider=self.provider,
1623
1764
  scope=self.scope,
1624
1765
  )
1625
1766
 
@@ -1634,8 +1775,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1634
1775
  if self.__class__ is not other.__class__:
1635
1776
  return NotImplemented
1636
1777
  return (
1637
- self.key == other.key and
1638
- self.provider == other.provider and
1639
1778
  self.scope == other.scope
1640
1779
  )
1641
1780
 
@@ -1645,8 +1784,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1645
1784
  setattr(__dataclass__cls, '__eq__', __eq__)
1646
1785
 
1647
1786
  __dataclass___setattr_frozen_fields = {
1648
- 'key',
1649
- 'provider',
1650
1787
  'scope',
1651
1788
  }
1652
1789
 
@@ -1664,8 +1801,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1664
1801
  setattr(__dataclass__cls, '__setattr__', __setattr__)
1665
1802
 
1666
1803
  __dataclass___delattr_frozen_fields = {
1667
- 'key',
1668
- 'provider',
1669
1804
  'scope',
1670
1805
  }
1671
1806
 
@@ -1691,8 +1826,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1691
1826
  self,
1692
1827
  '__dataclass_hash__',
1693
1828
  h := hash((
1694
- self.key,
1695
- self.provider,
1696
1829
  self.scope,
1697
1830
  ))
1698
1831
  )
@@ -1703,15 +1836,9 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1703
1836
 
1704
1837
  def __init__(
1705
1838
  self,
1706
- key: __dataclass__init__fields__0__annotation,
1707
- provider: __dataclass__init__fields__1__annotation,
1708
- scope: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
1839
+ scope: __dataclass__init__fields__0__annotation,
1709
1840
  ) -> __dataclass__None:
1710
- key = __dataclass__init__fields__0__coerce(key)
1711
- provider = __dataclass__init__fields__1__coerce(provider)
1712
- scope = __dataclass__init__fields__2__coerce(scope)
1713
- __dataclass__object_setattr(self, 'key', key)
1714
- __dataclass__object_setattr(self, 'provider', provider)
1841
+ scope = __dataclass__init__fields__0__coerce(scope)
1715
1842
  __dataclass__object_setattr(self, 'scope', scope)
1716
1843
  self.__post_init__()
1717
1844
 
@@ -1723,8 +1850,6 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1723
1850
  @__dataclass___recursive_repr()
1724
1851
  def __repr__(self):
1725
1852
  parts = []
1726
- parts.append(f"key={self.key!r}")
1727
- parts.append(f"provider={self.provider!r}")
1728
1853
  parts.append(f"scope={self.scope!r}")
1729
1854
  return (
1730
1855
  f"{self.__class__.__qualname__}("
@@ -1742,17 +1867,325 @@ def _process_dataclass__46c59d586838c9ad0bfaea00944f56523114cba1():
1742
1867
 
1743
1868
  @_register(
1744
1869
  plan_repr=(
1745
- "Plans(tup=(CopyPlan(fields=('key', 'source', 'name')), EqPlan(fields=('key', 'source', 'name')), HashPlan(acti"
1746
- "on='set_none', fields=None, cache=None), InitPlan(fields=(InitPlan.Field(name='key', annotation=OpRef(name='in"
1747
- "it.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType."
1748
- "INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='source', annotation=OpRef(name='i"
1749
- "nit.fields.1.annotation'), default=OpRef(name='init.fields.1.default'), default_factory=None, init=True, overr"
1750
- "ide=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='n"
1751
- "ame', annotation=OpRef(name='init.fields.2.annotation'), default=OpRef(name='init.fields.2.default'), default_"
1752
- "factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type"
1753
- "=None)), self_param='self', std_params=('key', 'source', 'name'), kw_only_params=(), frozen=False, slots=False"
1754
- ", post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=Fa"
1755
- "lse, fn=None), ReprPlan.Field(name='source', kw_only=False, fn=None), ReprPlan.Field(name='name', kw_only=Fals"
1870
+ "Plans(tup=(CopyPlan(fields=('ss', 'key')), EqPlan(fields=('ss', 'key')), FrozenPlan(fields=('ss', 'key'), allo"
1871
+ "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ss', 'key'), cache=True), InitPlan(fields=(Init"
1872
+ "Plan.Field(name='ss', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, i"
1873
+ "nit=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=N"
1874
+ "one, check_type=None), InitPlan.Field(name='key', annotation=OpRef(name='init.fields.1.annotation'), default=N"
1875
+ "one, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.f"
1876
+ "ields.1.coerce'), validate=None, check_type=None)), self_param='self', std_params=('ss', 'key'), kw_only_param"
1877
+ "s=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPla"
1878
+ "n.Field(name='ss', kw_only=False, fn=None), ReprPlan.Field(name='key', kw_only=False, fn=None)), id=False, ter"
1879
+ "se=False, default_fn=None)))"
1880
+ ),
1881
+ plan_repr_sha1='67e893f944c9f60c3bb7298d6024e3f17b097447',
1882
+ op_ref_idents=(
1883
+ '__dataclass__init__fields__0__annotation',
1884
+ '__dataclass__init__fields__0__coerce',
1885
+ '__dataclass__init__fields__1__annotation',
1886
+ '__dataclass__init__fields__1__coerce',
1887
+ ),
1888
+ cls_names=(
1889
+ ('omlish.inject.binder', 'ScopeSeededProvider'),
1890
+ ),
1891
+ )
1892
+ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
1893
+ def _process_dataclass(
1894
+ *,
1895
+ __dataclass__cls,
1896
+ __dataclass__init__fields__0__annotation,
1897
+ __dataclass__init__fields__0__coerce,
1898
+ __dataclass__init__fields__1__annotation,
1899
+ __dataclass__init__fields__1__coerce,
1900
+ __dataclass__FieldFnValidationError, # noqa
1901
+ __dataclass__FieldTypeValidationError, # noqa
1902
+ __dataclass__FnValidationError, # noqa
1903
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
1904
+ __dataclass__FunctionType=types.FunctionType, # noqa
1905
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
1906
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
1907
+ __dataclass__None=None, # noqa
1908
+ __dataclass__TypeError=TypeError, # noqa
1909
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
1910
+ __dataclass__isinstance=isinstance, # noqa
1911
+ __dataclass__object_setattr=object.__setattr__, # noqa
1912
+ __dataclass__property=property, # noqa
1913
+ ):
1914
+ def __copy__(self):
1915
+ if self.__class__ is not __dataclass__cls:
1916
+ raise TypeError(self)
1917
+ return __dataclass__cls( # noqa
1918
+ ss=self.ss,
1919
+ key=self.key,
1920
+ )
1921
+
1922
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
1923
+ if '__copy__' in __dataclass__cls.__dict__:
1924
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
1925
+ setattr(__dataclass__cls, '__copy__', __copy__)
1926
+
1927
+ def __eq__(self, other):
1928
+ if self is other:
1929
+ return True
1930
+ if self.__class__ is not other.__class__:
1931
+ return NotImplemented
1932
+ return (
1933
+ self.ss == other.ss and
1934
+ self.key == other.key
1935
+ )
1936
+
1937
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
1938
+ if '__eq__' in __dataclass__cls.__dict__:
1939
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
1940
+ setattr(__dataclass__cls, '__eq__', __eq__)
1941
+
1942
+ __dataclass___setattr_frozen_fields = {
1943
+ 'ss',
1944
+ 'key',
1945
+ }
1946
+
1947
+ def __setattr__(self, name, value):
1948
+ if (
1949
+ type(self) is __dataclass__cls
1950
+ or name in __dataclass___setattr_frozen_fields
1951
+ ):
1952
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
1953
+ super(__dataclass__cls, self).__setattr__(name, value)
1954
+
1955
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
1956
+ if '__setattr__' in __dataclass__cls.__dict__:
1957
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
1958
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
1959
+
1960
+ __dataclass___delattr_frozen_fields = {
1961
+ 'ss',
1962
+ 'key',
1963
+ }
1964
+
1965
+ def __delattr__(self, name):
1966
+ if (
1967
+ type(self) is __dataclass__cls
1968
+ or name in __dataclass___delattr_frozen_fields
1969
+ ):
1970
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
1971
+ super(__dataclass__cls, self).__delattr__(name)
1972
+
1973
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
1974
+ if '__delattr__' in __dataclass__cls.__dict__:
1975
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
1976
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
1977
+
1978
+ def __hash__(self):
1979
+ try:
1980
+ return self.__dataclass_hash__
1981
+ except AttributeError:
1982
+ pass
1983
+ object.__setattr__(
1984
+ self,
1985
+ '__dataclass_hash__',
1986
+ h := hash((
1987
+ self.ss,
1988
+ self.key,
1989
+ ))
1990
+ )
1991
+ return h
1992
+
1993
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
1994
+ setattr(__dataclass__cls, '__hash__', __hash__)
1995
+
1996
+ def __init__(
1997
+ self,
1998
+ ss: __dataclass__init__fields__0__annotation,
1999
+ key: __dataclass__init__fields__1__annotation,
2000
+ ) -> __dataclass__None:
2001
+ ss = __dataclass__init__fields__0__coerce(ss)
2002
+ key = __dataclass__init__fields__1__coerce(key)
2003
+ __dataclass__object_setattr(self, 'ss', ss)
2004
+ __dataclass__object_setattr(self, 'key', key)
2005
+
2006
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2007
+ if '__init__' in __dataclass__cls.__dict__:
2008
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
2009
+ setattr(__dataclass__cls, '__init__', __init__)
2010
+
2011
+ @__dataclass___recursive_repr()
2012
+ def __repr__(self):
2013
+ parts = []
2014
+ parts.append(f"ss={self.ss!r}")
2015
+ parts.append(f"key={self.key!r}")
2016
+ return (
2017
+ f"{self.__class__.__qualname__}("
2018
+ f"{', '.join(parts)}"
2019
+ f")"
2020
+ )
2021
+
2022
+ __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
2023
+ if '__repr__' in __dataclass__cls.__dict__:
2024
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
2025
+ setattr(__dataclass__cls, '__repr__', __repr__)
2026
+
2027
+ return _process_dataclass
2028
+
2029
+
2030
+ @_register(
2031
+ plan_repr=(
2032
+ "Plans(tup=(CopyPlan(fields=('tag',)), EqPlan(fields=('tag',)), FrozenPlan(fields=('tag',), allow_dynamic_dunde"
2033
+ "r_attrs=False), HashPlan(action='add', fields=('tag',), cache=True), InitPlan(fields=(InitPlan.Field(name='tag"
2034
+ "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
2035
+ "False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=Non"
2036
+ "e),), self_param='self', std_params=('tag',), kw_only_params=(), frozen=True, slots=False, post_init_params=No"
2037
+ "ne, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='tag', kw_only=False, fn=None),), id=F"
2038
+ "alse, terse=False, default_fn=None)))"
2039
+ ),
2040
+ plan_repr_sha1='e3da1b32863a0a4aca9ff268877a77ad5d6dd328',
2041
+ op_ref_idents=(
2042
+ '__dataclass__init__fields__0__annotation',
2043
+ '__dataclass__init__fields__0__coerce',
2044
+ ),
2045
+ cls_names=(
2046
+ ('omlish.inject.binder', 'SeededScope'),
2047
+ ),
2048
+ )
2049
+ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
2050
+ def _process_dataclass(
2051
+ *,
2052
+ __dataclass__cls,
2053
+ __dataclass__init__fields__0__annotation,
2054
+ __dataclass__init__fields__0__coerce,
2055
+ __dataclass__FieldFnValidationError, # noqa
2056
+ __dataclass__FieldTypeValidationError, # noqa
2057
+ __dataclass__FnValidationError, # noqa
2058
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
2059
+ __dataclass__FunctionType=types.FunctionType, # noqa
2060
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
2061
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
2062
+ __dataclass__None=None, # noqa
2063
+ __dataclass__TypeError=TypeError, # noqa
2064
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
2065
+ __dataclass__isinstance=isinstance, # noqa
2066
+ __dataclass__object_setattr=object.__setattr__, # noqa
2067
+ __dataclass__property=property, # noqa
2068
+ ):
2069
+ def __copy__(self):
2070
+ if self.__class__ is not __dataclass__cls:
2071
+ raise TypeError(self)
2072
+ return __dataclass__cls( # noqa
2073
+ tag=self.tag,
2074
+ )
2075
+
2076
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
2077
+ if '__copy__' in __dataclass__cls.__dict__:
2078
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2079
+ setattr(__dataclass__cls, '__copy__', __copy__)
2080
+
2081
+ def __eq__(self, other):
2082
+ if self is other:
2083
+ return True
2084
+ if self.__class__ is not other.__class__:
2085
+ return NotImplemented
2086
+ return (
2087
+ self.tag == other.tag
2088
+ )
2089
+
2090
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
2091
+ if '__eq__' in __dataclass__cls.__dict__:
2092
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
2093
+ setattr(__dataclass__cls, '__eq__', __eq__)
2094
+
2095
+ __dataclass___setattr_frozen_fields = {
2096
+ 'tag',
2097
+ }
2098
+
2099
+ def __setattr__(self, name, value):
2100
+ if (
2101
+ type(self) is __dataclass__cls
2102
+ or name in __dataclass___setattr_frozen_fields
2103
+ ):
2104
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
2105
+ super(__dataclass__cls, self).__setattr__(name, value)
2106
+
2107
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
2108
+ if '__setattr__' in __dataclass__cls.__dict__:
2109
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
2110
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
2111
+
2112
+ __dataclass___delattr_frozen_fields = {
2113
+ 'tag',
2114
+ }
2115
+
2116
+ def __delattr__(self, name):
2117
+ if (
2118
+ type(self) is __dataclass__cls
2119
+ or name in __dataclass___delattr_frozen_fields
2120
+ ):
2121
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
2122
+ super(__dataclass__cls, self).__delattr__(name)
2123
+
2124
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
2125
+ if '__delattr__' in __dataclass__cls.__dict__:
2126
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
2127
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
2128
+
2129
+ def __hash__(self):
2130
+ try:
2131
+ return self.__dataclass_hash__
2132
+ except AttributeError:
2133
+ pass
2134
+ object.__setattr__(
2135
+ self,
2136
+ '__dataclass_hash__',
2137
+ h := hash((
2138
+ self.tag,
2139
+ ))
2140
+ )
2141
+ return h
2142
+
2143
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2144
+ setattr(__dataclass__cls, '__hash__', __hash__)
2145
+
2146
+ def __init__(
2147
+ self,
2148
+ tag: __dataclass__init__fields__0__annotation,
2149
+ ) -> __dataclass__None:
2150
+ tag = __dataclass__init__fields__0__coerce(tag)
2151
+ __dataclass__object_setattr(self, 'tag', tag)
2152
+
2153
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2154
+ if '__init__' in __dataclass__cls.__dict__:
2155
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
2156
+ setattr(__dataclass__cls, '__init__', __init__)
2157
+
2158
+ @__dataclass___recursive_repr()
2159
+ def __repr__(self):
2160
+ parts = []
2161
+ parts.append(f"tag={self.tag!r}")
2162
+ return (
2163
+ f"{self.__class__.__qualname__}("
2164
+ f"{', '.join(parts)}"
2165
+ f")"
2166
+ )
2167
+
2168
+ __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
2169
+ if '__repr__' in __dataclass__cls.__dict__:
2170
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
2171
+ setattr(__dataclass__cls, '__repr__', __repr__)
2172
+
2173
+ return _process_dataclass
2174
+
2175
+
2176
+ @_register(
2177
+ plan_repr=(
2178
+ "Plans(tup=(CopyPlan(fields=('key', 'source', 'name')), EqPlan(fields=('key', 'source', 'name')), HashPlan(acti"
2179
+ "on='set_none', fields=None, cache=None), InitPlan(fields=(InitPlan.Field(name='key', annotation=OpRef(name='in"
2180
+ "it.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType."
2181
+ "INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='source', annotation=OpRef(name='i"
2182
+ "nit.fields.1.annotation'), default=OpRef(name='init.fields.1.default'), default_factory=None, init=True, overr"
2183
+ "ide=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='n"
2184
+ "ame', annotation=OpRef(name='init.fields.2.annotation'), default=OpRef(name='init.fields.2.default'), default_"
2185
+ "factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type"
2186
+ "=None)), self_param='self', std_params=('key', 'source', 'name'), kw_only_params=(), frozen=False, slots=False"
2187
+ ", post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=Fa"
2188
+ "lse, fn=None), ReprPlan.Field(name='source', kw_only=False, fn=None), ReprPlan.Field(name='name', kw_only=Fals"
1756
2189
  "e, fn=None)), id=False, terse=False, default_fn=None)))"
1757
2190
  ),
1758
2191
  plan_repr_sha1='54394c5ebd85aa173d2f60f20fae81b348f6cb9d',
@@ -1862,38 +2295,28 @@ def _process_dataclass__54394c5ebd85aa173d2f60f20fae81b348f6cb9d():
1862
2295
 
1863
2296
  @_register(
1864
2297
  plan_repr=(
1865
- "Plans(tup=(CopyPlan(fields=('v', 'tag')), EqPlan(fields=('v', 'tag')), FrozenPlan(fields=('v', 'tag'), allow_d"
1866
- "ynamic_dunder_attrs=False), HashPlan(action='add', fields=('v', 'tag'), cache=True), InitPlan(fields=(InitPlan"
1867
- ".Field(name='v', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=T"
1868
- "rue, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Fie"
1869
- "ld(name='tag', annotation=OpRef(name='init.fields.1.annotation'), default=OpRef(name='init.fields.1.default'),"
1870
- " default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(n"
1871
- "ame='init.fields.1.validate'), check_type=None)), self_param='self', std_params=('v',), kw_only_params=('tag',"
1872
- "), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.F"
1873
- "ield(name='v', kw_only=False, fn=None), ReprPlan.Field(name='tag', kw_only=True, fn=OpRef(name='repr.fns.1.fn'"
1874
- "))), id=False, terse=True, default_fn=None)))"
2298
+ "Plans(tup=(CopyPlan(fields=('scope',)), EqPlan(fields=('scope',)), HashPlan(action='set_none', fields=None, ca"
2299
+ "che=None), InitPlan(fields=(InitPlan.Field(name='scope', annotation=OpRef(name='init.fields.0.annotation'), de"
2300
+ "fault=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, valid"
2301
+ "ate=None, check_type=None),), self_param='self', std_params=('scope',), kw_only_params=(), frozen=False, slots"
2302
+ "=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='scope', kw"
2303
+ "_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
1875
2304
  ),
1876
- plan_repr_sha1='5cb76e85fd58b7b06dd5593254d86e557222901c',
2305
+ plan_repr_sha1='d43eaf7e550de17fc6936c19e4e5aa545c8a93d8',
1877
2306
  op_ref_idents=(
1878
2307
  '__dataclass__init__fields__0__annotation',
1879
- '__dataclass__init__fields__1__annotation',
1880
- '__dataclass__init__fields__1__default',
1881
- '__dataclass__init__fields__1__validate',
1882
- '__dataclass__repr__fns__1__fn',
1883
2308
  ),
1884
2309
  cls_names=(
1885
- ('omlish.inject.helpers.id', 'Id'),
2310
+ ('omlish.inject.errors', 'ScopeAlreadyOpenError'),
2311
+ ('omlish.inject.errors', 'ScopeError'),
2312
+ ('omlish.inject.errors', 'ScopeNotOpenError'),
1886
2313
  ),
1887
2314
  )
1888
- def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
2315
+ def _process_dataclass__d43eaf7e550de17fc6936c19e4e5aa545c8a93d8():
1889
2316
  def _process_dataclass(
1890
2317
  *,
1891
2318
  __dataclass__cls,
1892
2319
  __dataclass__init__fields__0__annotation,
1893
- __dataclass__init__fields__1__annotation,
1894
- __dataclass__init__fields__1__default,
1895
- __dataclass__init__fields__1__validate,
1896
- __dataclass__repr__fns__1__fn,
1897
2320
  __dataclass__FieldFnValidationError, # noqa
1898
2321
  __dataclass__FieldTypeValidationError, # noqa
1899
2322
  __dataclass__FnValidationError, # noqa
@@ -1912,8 +2335,7 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
1912
2335
  if self.__class__ is not __dataclass__cls:
1913
2336
  raise TypeError(self)
1914
2337
  return __dataclass__cls( # noqa
1915
- v=self.v,
1916
- tag=self.tag,
2338
+ scope=self.scope,
1917
2339
  )
1918
2340
 
1919
2341
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -1927,8 +2349,7 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
1927
2349
  if self.__class__ is not other.__class__:
1928
2350
  return NotImplemented
1929
2351
  return (
1930
- self.v == other.v and
1931
- self.tag == other.tag
2352
+ self.scope == other.scope
1932
2353
  )
1933
2354
 
1934
2355
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -1936,9 +2357,87 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
1936
2357
  raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
1937
2358
  setattr(__dataclass__cls, '__eq__', __eq__)
1938
2359
 
2360
+ setattr(__dataclass__cls, '__hash__', None)
2361
+
2362
+ def __init__(
2363
+ self,
2364
+ scope: __dataclass__init__fields__0__annotation,
2365
+ ) -> __dataclass__None:
2366
+ self.scope = scope
2367
+
2368
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2369
+ if '__init__' in __dataclass__cls.__dict__:
2370
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
2371
+ setattr(__dataclass__cls, '__init__', __init__)
2372
+
2373
+ @__dataclass___recursive_repr()
2374
+ def __repr__(self):
2375
+ parts = []
2376
+ parts.append(f"scope={self.scope!r}")
2377
+ return (
2378
+ f"{self.__class__.__qualname__}("
2379
+ f"{', '.join(parts)}"
2380
+ f")"
2381
+ )
2382
+
2383
+ __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
2384
+ if '__repr__' in __dataclass__cls.__dict__:
2385
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
2386
+ setattr(__dataclass__cls, '__repr__', __repr__)
2387
+
2388
+ return _process_dataclass
2389
+
2390
+
2391
+ @_register(
2392
+ plan_repr=(
2393
+ "Plans(tup=(CopyPlan(fields=('v',)), FrozenPlan(fields=('v',), allow_dynamic_dunder_attrs=False), InitPlan(fiel"
2394
+ "ds=(InitPlan.Field(name='v', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory="
2395
+ "None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),)"
2396
+ ", self_param='self', std_params=('v',), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init"
2397
+ "_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='v', kw_only=False, fn=None),), id=False, ters"
2398
+ "e=False, default_fn=None)))"
2399
+ ),
2400
+ plan_repr_sha1='1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c',
2401
+ op_ref_idents=(
2402
+ '__dataclass__init__fields__0__annotation',
2403
+ ),
2404
+ cls_names=(
2405
+ ('omlish.inject.helpers.constfn', 'ConstFn'),
2406
+ ),
2407
+ )
2408
+ def _process_dataclass__1a1c1b0c2f2ad1d4b7f67f6c870a5eb6e37e231c():
2409
+ def _process_dataclass(
2410
+ *,
2411
+ __dataclass__cls,
2412
+ __dataclass__init__fields__0__annotation,
2413
+ __dataclass__FieldFnValidationError, # noqa
2414
+ __dataclass__FieldTypeValidationError, # noqa
2415
+ __dataclass__FnValidationError, # noqa
2416
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
2417
+ __dataclass__FunctionType=types.FunctionType, # noqa
2418
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
2419
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
2420
+ __dataclass__None=None, # noqa
2421
+ __dataclass__TypeError=TypeError, # noqa
2422
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
2423
+ __dataclass__isinstance=isinstance, # noqa
2424
+ __dataclass__object_setattr=object.__setattr__, # noqa
2425
+ __dataclass__property=property, # noqa
2426
+ ):
2427
+ def __copy__(self):
2428
+ if self.__class__ is not __dataclass__cls:
2429
+ raise TypeError(self)
2430
+ return __dataclass__cls( # noqa
2431
+ v=self.v,
2432
+ )
2433
+
2434
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
2435
+ if '__copy__' in __dataclass__cls.__dict__:
2436
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2437
+ setattr(__dataclass__cls, '__copy__', __copy__)
2438
+
1939
2439
  __dataclass___setattr_frozen_fields = {
1940
2440
  'v',
1941
- 'tag',
1942
2441
  }
1943
2442
 
1944
2443
  def __setattr__(self, name, value):
@@ -1956,7 +2455,6 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
1956
2455
 
1957
2456
  __dataclass___delattr_frozen_fields = {
1958
2457
  'v',
1959
- 'tag',
1960
2458
  }
1961
2459
 
1962
2460
  def __delattr__(self, name):
@@ -1972,39 +2470,12 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
1972
2470
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
1973
2471
  setattr(__dataclass__cls, '__delattr__', __delattr__)
1974
2472
 
1975
- def __hash__(self):
1976
- try:
1977
- return self.__dataclass_hash__
1978
- except AttributeError:
1979
- pass
1980
- object.__setattr__(
1981
- self,
1982
- '__dataclass_hash__',
1983
- h := hash((
1984
- self.v,
1985
- self.tag,
1986
- ))
1987
- )
1988
- return h
1989
-
1990
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
1991
- setattr(__dataclass__cls, '__hash__', __hash__)
1992
-
1993
2473
  def __init__(
1994
2474
  self,
1995
2475
  v: __dataclass__init__fields__0__annotation,
1996
- *,
1997
- tag: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
1998
2476
  ) -> __dataclass__None:
1999
- if not __dataclass__init__fields__1__validate(tag):
2000
- raise __dataclass__FieldFnValidationError(
2001
- obj=self,
2002
- fn=__dataclass__init__fields__1__validate,
2003
- field='tag',
2004
- value=tag,
2005
- )
2006
2477
  __dataclass__object_setattr(self, 'v', v)
2007
- __dataclass__object_setattr(self, 'tag', tag)
2478
+ self.__post_init__()
2008
2479
 
2009
2480
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2010
2481
  if '__init__' in __dataclass__cls.__dict__:
@@ -2014,9 +2485,7 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
2014
2485
  @__dataclass___recursive_repr()
2015
2486
  def __repr__(self):
2016
2487
  parts = []
2017
- parts.append(f"{self.v!r}")
2018
- if (s := __dataclass__repr__fns__1__fn(self.tag)) is not None:
2019
- parts.append(f"tag={s}")
2488
+ parts.append(f"v={self.v!r}")
2020
2489
  return (
2021
2490
  f"{self.__class__.__qualname__}("
2022
2491
  f"{', '.join(parts)}"
@@ -2029,35 +2498,42 @@ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
2029
2498
  setattr(__dataclass__cls, '__repr__', __repr__)
2030
2499
 
2031
2500
  return _process_dataclass
2032
-
2033
-
2034
- @_register(
2035
- plan_repr=(
2036
- "Plans(tup=(CopyPlan(fields=('root', 'level')), EqPlan(fields=('root', 'level')), FrozenPlan(fields=('root', 'l"
2037
- "evel'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('root', 'level'), cache=False), Init"
2038
- "Plan(fields=(InitPlan.Field(name='root', annotation=OpRef(name='init.fields.0.annotation'), default=None, defa"
2039
- "ult_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_"
2040
- "type=None), InitPlan.Field(name='level', annotation=OpRef(name='init.fields.1.annotation'), default=None, defa"
2041
- "ult_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_"
2042
- "type=None)), self_param='self', std_params=('root', 'level'), kw_only_params=(), frozen=True, slots=False, pos"
2043
- "t_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='root', kw_only=False,"
2044
- " fn=None), ReprPlan.Field(name='level', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
2501
+
2502
+
2503
+ @_register(
2504
+ plan_repr=(
2505
+ "Plans(tup=(CopyPlan(fields=('v', 'tag')), EqPlan(fields=('v', 'tag')), FrozenPlan(fields=('v', 'tag'), allow_d"
2506
+ "ynamic_dunder_attrs=False), HashPlan(action='add', fields=('v', 'tag'), cache=True), InitPlan(fields=(InitPlan"
2507
+ ".Field(name='v', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=T"
2508
+ "rue, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Fie"
2509
+ "ld(name='tag', annotation=OpRef(name='init.fields.1.annotation'), default=OpRef(name='init.fields.1.default'),"
2510
+ " default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(n"
2511
+ "ame='init.fields.1.validate'), check_type=None)), self_param='self', std_params=('v',), kw_only_params=('tag',"
2512
+ "), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.F"
2513
+ "ield(name='v', kw_only=False, fn=None), ReprPlan.Field(name='tag', kw_only=True, fn=OpRef(name='repr.fns.1.fn'"
2514
+ "))), id=False, terse=True, default_fn=None)))"
2045
2515
  ),
2046
- plan_repr_sha1='5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3',
2516
+ plan_repr_sha1='5cb76e85fd58b7b06dd5593254d86e557222901c',
2047
2517
  op_ref_idents=(
2048
2518
  '__dataclass__init__fields__0__annotation',
2049
2519
  '__dataclass__init__fields__1__annotation',
2520
+ '__dataclass__init__fields__1__default',
2521
+ '__dataclass__init__fields__1__validate',
2522
+ '__dataclass__repr__fns__1__fn',
2050
2523
  ),
2051
2524
  cls_names=(
2052
- ('omlish.inject.helpers.wrappers', 'WrapperBinderHelper._Level'),
2525
+ ('omlish.inject.helpers.id', 'Id'),
2053
2526
  ),
2054
2527
  )
2055
- def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2528
+ def _process_dataclass__5cb76e85fd58b7b06dd5593254d86e557222901c():
2056
2529
  def _process_dataclass(
2057
2530
  *,
2058
2531
  __dataclass__cls,
2059
2532
  __dataclass__init__fields__0__annotation,
2060
2533
  __dataclass__init__fields__1__annotation,
2534
+ __dataclass__init__fields__1__default,
2535
+ __dataclass__init__fields__1__validate,
2536
+ __dataclass__repr__fns__1__fn,
2061
2537
  __dataclass__FieldFnValidationError, # noqa
2062
2538
  __dataclass__FieldTypeValidationError, # noqa
2063
2539
  __dataclass__FnValidationError, # noqa
@@ -2076,8 +2552,8 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2076
2552
  if self.__class__ is not __dataclass__cls:
2077
2553
  raise TypeError(self)
2078
2554
  return __dataclass__cls( # noqa
2079
- root=self.root,
2080
- level=self.level,
2555
+ v=self.v,
2556
+ tag=self.tag,
2081
2557
  )
2082
2558
 
2083
2559
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2091,8 +2567,8 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2091
2567
  if self.__class__ is not other.__class__:
2092
2568
  return NotImplemented
2093
2569
  return (
2094
- self.root == other.root and
2095
- self.level == other.level
2570
+ self.v == other.v and
2571
+ self.tag == other.tag
2096
2572
  )
2097
2573
 
2098
2574
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -2101,8 +2577,8 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2101
2577
  setattr(__dataclass__cls, '__eq__', __eq__)
2102
2578
 
2103
2579
  __dataclass___setattr_frozen_fields = {
2104
- 'root',
2105
- 'level',
2580
+ 'v',
2581
+ 'tag',
2106
2582
  }
2107
2583
 
2108
2584
  def __setattr__(self, name, value):
@@ -2119,8 +2595,8 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2119
2595
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2120
2596
 
2121
2597
  __dataclass___delattr_frozen_fields = {
2122
- 'root',
2123
- 'level',
2598
+ 'v',
2599
+ 'tag',
2124
2600
  }
2125
2601
 
2126
2602
  def __delattr__(self, name):
@@ -2137,21 +2613,38 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2137
2613
  setattr(__dataclass__cls, '__delattr__', __delattr__)
2138
2614
 
2139
2615
  def __hash__(self):
2140
- return hash((
2141
- self.root,
2142
- self.level,
2143
- ))
2616
+ try:
2617
+ return self.__dataclass_hash__
2618
+ except AttributeError:
2619
+ pass
2620
+ object.__setattr__(
2621
+ self,
2622
+ '__dataclass_hash__',
2623
+ h := hash((
2624
+ self.v,
2625
+ self.tag,
2626
+ ))
2627
+ )
2628
+ return h
2144
2629
 
2145
2630
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2146
2631
  setattr(__dataclass__cls, '__hash__', __hash__)
2147
2632
 
2148
2633
  def __init__(
2149
2634
  self,
2150
- root: __dataclass__init__fields__0__annotation,
2151
- level: __dataclass__init__fields__1__annotation,
2635
+ v: __dataclass__init__fields__0__annotation,
2636
+ *,
2637
+ tag: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
2152
2638
  ) -> __dataclass__None:
2153
- __dataclass__object_setattr(self, 'root', root)
2154
- __dataclass__object_setattr(self, 'level', level)
2639
+ if not __dataclass__init__fields__1__validate(tag):
2640
+ raise __dataclass__FieldFnValidationError(
2641
+ obj=self,
2642
+ fn=__dataclass__init__fields__1__validate,
2643
+ field='tag',
2644
+ value=tag,
2645
+ )
2646
+ __dataclass__object_setattr(self, 'v', v)
2647
+ __dataclass__object_setattr(self, 'tag', tag)
2155
2648
 
2156
2649
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2157
2650
  if '__init__' in __dataclass__cls.__dict__:
@@ -2161,8 +2654,9 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2161
2654
  @__dataclass___recursive_repr()
2162
2655
  def __repr__(self):
2163
2656
  parts = []
2164
- parts.append(f"root={self.root!r}")
2165
- parts.append(f"level={self.level!r}")
2657
+ parts.append(f"{self.v!r}")
2658
+ if (s := __dataclass__repr__fns__1__fn(self.tag)) is not None:
2659
+ parts.append(f"tag={s}")
2166
2660
  return (
2167
2661
  f"{self.__class__.__qualname__}("
2168
2662
  f"{', '.join(parts)}"
@@ -2179,34 +2673,21 @@ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2179
2673
 
2180
2674
  @_register(
2181
2675
  plan_repr=(
2182
- "Plans(tup=(CopyPlan(fields=('seeds', 'prvs')), EqPlan(fields=('seeds', 'prvs')), FrozenPlan(fields=('seeds', '"
2183
- "prvs'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('seeds', 'prvs'), cache=False), Init"
2184
- "Plan(fields=(InitPlan.Field(name='seeds', annotation=OpRef(name='init.fields.0.annotation'), default=None, def"
2185
- "ault_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check"
2186
- "_type=None), InitPlan.Field(name='prvs', annotation=OpRef(name='init.fields.1.annotation'), default=None, defa"
2187
- "ult_factory=OpRef(name='init.fields.1.default_factory'), init=True, override=False, field_type=FieldType.INSTA"
2188
- "NCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('seeds', 'prvs'), kw_only_p"
2189
- "arams=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(Rep"
2190
- "rPlan.Field(name='seeds', kw_only=False, fn=None), ReprPlan.Field(name='prvs', kw_only=False, fn=None)), id=Fa"
2191
- "lse, terse=False, default_fn=None)))"
2192
- ),
2193
- plan_repr_sha1='61f34069d7091014f66ca9e1c1d27dbbc1a4e03f',
2194
- op_ref_idents=(
2195
- '__dataclass__init__fields__0__annotation',
2196
- '__dataclass__init__fields__1__annotation',
2197
- '__dataclass__init__fields__1__default_factory',
2676
+ "Plans(tup=(CopyPlan(fields=()), FrozenPlan(fields=(), allow_dynamic_dunder_attrs=False), InitPlan(fields=(), s"
2677
+ "elf_param='self', std_params=(), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns="
2678
+ "(), validate_fns=()), ReprPlan(fields=(), id=True, terse=False, default_fn=None)))"
2198
2679
  ),
2680
+ plan_repr_sha1='c726b62427445e76234a6a472593ae91ca8d6457',
2681
+ op_ref_idents=(),
2199
2682
  cls_names=(
2200
- ('omlish.inject.impl.elements', 'SeededScopeImpl.State'),
2683
+ ('omlish.inject.helpers.multis', 'ItemsBinderHelper._ItemTag'),
2684
+ ('omlish.inject.helpers.wrappers', 'WrapperBinderHelper._Root'),
2201
2685
  ),
2202
2686
  )
2203
- def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2687
+ def _process_dataclass__c726b62427445e76234a6a472593ae91ca8d6457():
2204
2688
  def _process_dataclass(
2205
2689
  *,
2206
2690
  __dataclass__cls,
2207
- __dataclass__init__fields__0__annotation,
2208
- __dataclass__init__fields__1__annotation,
2209
- __dataclass__init__fields__1__default_factory,
2210
2691
  __dataclass__FieldFnValidationError, # noqa
2211
2692
  __dataclass__FieldTypeValidationError, # noqa
2212
2693
  __dataclass__FnValidationError, # noqa
@@ -2224,40 +2705,16 @@ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2224
2705
  def __copy__(self):
2225
2706
  if self.__class__ is not __dataclass__cls:
2226
2707
  raise TypeError(self)
2227
- return __dataclass__cls( # noqa
2228
- seeds=self.seeds,
2229
- prvs=self.prvs,
2230
- )
2708
+ return __dataclass__cls() # noqa
2231
2709
 
2232
2710
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
2233
2711
  if '__copy__' in __dataclass__cls.__dict__:
2234
2712
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2235
2713
  setattr(__dataclass__cls, '__copy__', __copy__)
2236
2714
 
2237
- def __eq__(self, other):
2238
- if self is other:
2239
- return True
2240
- if self.__class__ is not other.__class__:
2241
- return NotImplemented
2242
- return (
2243
- self.seeds == other.seeds and
2244
- self.prvs == other.prvs
2245
- )
2246
-
2247
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
2248
- if '__eq__' in __dataclass__cls.__dict__:
2249
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
2250
- setattr(__dataclass__cls, '__eq__', __eq__)
2251
-
2252
- __dataclass___setattr_frozen_fields = {
2253
- 'seeds',
2254
- 'prvs',
2255
- }
2256
-
2257
2715
  def __setattr__(self, name, value):
2258
2716
  if (
2259
2717
  type(self) is __dataclass__cls
2260
- or name in __dataclass___setattr_frozen_fields
2261
2718
  ):
2262
2719
  raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
2263
2720
  super(__dataclass__cls, self).__setattr__(name, value)
@@ -2267,15 +2724,9 @@ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2267
2724
  raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
2268
2725
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2269
2726
 
2270
- __dataclass___delattr_frozen_fields = {
2271
- 'seeds',
2272
- 'prvs',
2273
- }
2274
-
2275
2727
  def __delattr__(self, name):
2276
2728
  if (
2277
2729
  type(self) is __dataclass__cls
2278
- or name in __dataclass___delattr_frozen_fields
2279
2730
  ):
2280
2731
  raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
2281
2732
  super(__dataclass__cls, self).__delattr__(name)
@@ -2285,24 +2736,10 @@ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2285
2736
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
2286
2737
  setattr(__dataclass__cls, '__delattr__', __delattr__)
2287
2738
 
2288
- def __hash__(self):
2289
- return hash((
2290
- self.seeds,
2291
- self.prvs,
2292
- ))
2293
-
2294
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2295
- setattr(__dataclass__cls, '__hash__', __hash__)
2296
-
2297
2739
  def __init__(
2298
2740
  self,
2299
- seeds: __dataclass__init__fields__0__annotation,
2300
- prvs: __dataclass__init__fields__1__annotation = __dataclass__HAS_DEFAULT_FACTORY,
2301
2741
  ) -> __dataclass__None:
2302
- if prvs is __dataclass__HAS_DEFAULT_FACTORY:
2303
- prvs = __dataclass__init__fields__1__default_factory()
2304
- __dataclass__object_setattr(self, 'seeds', seeds)
2305
- __dataclass__object_setattr(self, 'prvs', prvs)
2742
+ pass
2306
2743
 
2307
2744
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2308
2745
  if '__init__' in __dataclass__cls.__dict__:
@@ -2312,10 +2749,8 @@ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2312
2749
  @__dataclass___recursive_repr()
2313
2750
  def __repr__(self):
2314
2751
  parts = []
2315
- parts.append(f"seeds={self.seeds!r}")
2316
- parts.append(f"prvs={self.prvs!r}")
2317
2752
  return (
2318
- f"{self.__class__.__qualname__}("
2753
+ f"{self.__class__.__qualname__}@{hex(id(self))[2:]}("
2319
2754
  f"{', '.join(parts)}"
2320
2755
  f")"
2321
2756
  )
@@ -2330,36 +2765,26 @@ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
2330
2765
 
2331
2766
  @_register(
2332
2767
  plan_repr=(
2333
- "Plans(tup=(CopyPlan(fields=('ss', 'key')), EqPlan(fields=('ss', 'key')), FrozenPlan(fields=('ss', 'key'), allo"
2334
- "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ss', 'key'), cache=True), InitPlan(fields=(Init"
2335
- "Plan.Field(name='ss', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, i"
2336
- "nit=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=N"
2337
- "one, check_type=None), InitPlan.Field(name='key', annotation=OpRef(name='init.fields.1.annotation'), default=N"
2338
- "one, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.f"
2339
- "ields.1.coerce'), validate=None, check_type=None)), self_param='self', std_params=('ss', 'key'), kw_only_param"
2340
- "s=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPla"
2341
- "n.Field(name='ss', kw_only=False, fn=None), ReprPlan.Field(name='key', kw_only=False, fn=None)), id=False, ter"
2342
- "se=False, default_fn=None)))"
2768
+ "Plans(tup=(CopyPlan(fields=('vs',)), FrozenPlan(fields=('vs',), allow_dynamic_dunder_attrs=False), InitPlan(fi"
2769
+ "elds=(InitPlan.Field(name='vs', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_facto"
2770
+ "ry=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None"
2771
+ "),), self_param='self', std_params=('vs',), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
2772
+ ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='vs', kw_only=False, fn=None),), id=Fals"
2773
+ "e, terse=False, default_fn=None)))"
2343
2774
  ),
2344
- plan_repr_sha1='67e893f944c9f60c3bb7298d6024e3f17b097447',
2775
+ plan_repr_sha1='c4cee7449949f8c11b10dcaf6b91f62f28a6fd18',
2345
2776
  op_ref_idents=(
2346
2777
  '__dataclass__init__fields__0__annotation',
2347
- '__dataclass__init__fields__0__coerce',
2348
- '__dataclass__init__fields__1__annotation',
2349
- '__dataclass__init__fields__1__coerce',
2350
2778
  ),
2351
2779
  cls_names=(
2352
- ('omlish.inject.binder', 'ScopeSeededProvider'),
2780
+ ('omlish.inject.helpers.multis', 'ItemsBinderHelper._ItemsBox'),
2353
2781
  ),
2354
2782
  )
2355
- def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2783
+ def _process_dataclass__c4cee7449949f8c11b10dcaf6b91f62f28a6fd18():
2356
2784
  def _process_dataclass(
2357
2785
  *,
2358
2786
  __dataclass__cls,
2359
2787
  __dataclass__init__fields__0__annotation,
2360
- __dataclass__init__fields__0__coerce,
2361
- __dataclass__init__fields__1__annotation,
2362
- __dataclass__init__fields__1__coerce,
2363
2788
  __dataclass__FieldFnValidationError, # noqa
2364
2789
  __dataclass__FieldTypeValidationError, # noqa
2365
2790
  __dataclass__FnValidationError, # noqa
@@ -2378,8 +2803,7 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2378
2803
  if self.__class__ is not __dataclass__cls:
2379
2804
  raise TypeError(self)
2380
2805
  return __dataclass__cls( # noqa
2381
- ss=self.ss,
2382
- key=self.key,
2806
+ vs=self.vs,
2383
2807
  )
2384
2808
 
2385
2809
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2387,24 +2811,8 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2387
2811
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2388
2812
  setattr(__dataclass__cls, '__copy__', __copy__)
2389
2813
 
2390
- def __eq__(self, other):
2391
- if self is other:
2392
- return True
2393
- if self.__class__ is not other.__class__:
2394
- return NotImplemented
2395
- return (
2396
- self.ss == other.ss and
2397
- self.key == other.key
2398
- )
2399
-
2400
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
2401
- if '__eq__' in __dataclass__cls.__dict__:
2402
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
2403
- setattr(__dataclass__cls, '__eq__', __eq__)
2404
-
2405
2814
  __dataclass___setattr_frozen_fields = {
2406
- 'ss',
2407
- 'key',
2815
+ 'vs',
2408
2816
  }
2409
2817
 
2410
2818
  def __setattr__(self, name, value):
@@ -2421,8 +2829,7 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2421
2829
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2422
2830
 
2423
2831
  __dataclass___delattr_frozen_fields = {
2424
- 'ss',
2425
- 'key',
2832
+ 'vs',
2426
2833
  }
2427
2834
 
2428
2835
  def __delattr__(self, name):
@@ -2438,33 +2845,11 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2438
2845
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
2439
2846
  setattr(__dataclass__cls, '__delattr__', __delattr__)
2440
2847
 
2441
- def __hash__(self):
2442
- try:
2443
- return self.__dataclass_hash__
2444
- except AttributeError:
2445
- pass
2446
- object.__setattr__(
2447
- self,
2448
- '__dataclass_hash__',
2449
- h := hash((
2450
- self.ss,
2451
- self.key,
2452
- ))
2453
- )
2454
- return h
2455
-
2456
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2457
- setattr(__dataclass__cls, '__hash__', __hash__)
2458
-
2459
2848
  def __init__(
2460
2849
  self,
2461
- ss: __dataclass__init__fields__0__annotation,
2462
- key: __dataclass__init__fields__1__annotation,
2850
+ vs: __dataclass__init__fields__0__annotation,
2463
2851
  ) -> __dataclass__None:
2464
- ss = __dataclass__init__fields__0__coerce(ss)
2465
- key = __dataclass__init__fields__1__coerce(key)
2466
- __dataclass__object_setattr(self, 'ss', ss)
2467
- __dataclass__object_setattr(self, 'key', key)
2852
+ __dataclass__object_setattr(self, 'vs', vs)
2468
2853
 
2469
2854
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2470
2855
  if '__init__' in __dataclass__cls.__dict__:
@@ -2474,8 +2859,7 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2474
2859
  @__dataclass___recursive_repr()
2475
2860
  def __repr__(self):
2476
2861
  parts = []
2477
- parts.append(f"ss={self.ss!r}")
2478
- parts.append(f"key={self.key!r}")
2862
+ parts.append(f"vs={self.vs!r}")
2479
2863
  return (
2480
2864
  f"{self.__class__.__qualname__}("
2481
2865
  f"{', '.join(parts)}"
@@ -2492,41 +2876,31 @@ def _process_dataclass__67e893f944c9f60c3bb7298d6024e3f17b097447():
2492
2876
 
2493
2877
  @_register(
2494
2878
  plan_repr=(
2495
- "Plans(tup=(CopyPlan(fields=('multi_key', 'map_key', 'dst')), EqPlan(fields=('multi_key', 'map_key', 'dst')), F"
2496
- "rozenPlan(fields=('multi_key', 'map_key', 'dst'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fi"
2497
- "elds=('multi_key', 'map_key', 'dst'), cache=True), InitPlan(fields=(InitPlan.Field(name='multi_key', annotatio"
2498
- "n=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field"
2499
- "_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fields.0.validate'), check_type=None), InitPl"
2500
- "an.Field(name='map_key', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None"
2501
- ", init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), Init"
2502
- "Plan.Field(name='dst', annotation=OpRef(name='init.fields.2.annotation'), default=None, default_factory=None, "
2503
- "init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.2.coerce'), validate="
2504
- "None, check_type=None)), self_param='self', std_params=('multi_key', 'map_key', 'dst'), kw_only_params=(), fro"
2505
- "zen=True, slots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(nam"
2506
- "e='multi_key', kw_only=False, fn=None), ReprPlan.Field(name='map_key', kw_only=False, fn=None), ReprPlan.Field"
2507
- "(name='dst', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
2879
+ "Plans(tup=(CopyPlan(fields=('root', 'level')), EqPlan(fields=('root', 'level')), FrozenPlan(fields=('root', 'l"
2880
+ "evel'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('root', 'level'), cache=False), Init"
2881
+ "Plan(fields=(InitPlan.Field(name='root', annotation=OpRef(name='init.fields.0.annotation'), default=None, defa"
2882
+ "ult_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_"
2883
+ "type=None), InitPlan.Field(name='level', annotation=OpRef(name='init.fields.1.annotation'), default=None, defa"
2884
+ "ult_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_"
2885
+ "type=None)), self_param='self', std_params=('root', 'level'), kw_only_params=(), frozen=True, slots=False, pos"
2886
+ "t_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='root', kw_only=False,"
2887
+ " fn=None), ReprPlan.Field(name='level', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
2508
2888
  ),
2509
- plan_repr_sha1='6ed12b80942097addba0fe978453312450cdf8d9',
2889
+ plan_repr_sha1='5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3',
2510
2890
  op_ref_idents=(
2511
2891
  '__dataclass__init__fields__0__annotation',
2512
- '__dataclass__init__fields__0__validate',
2513
2892
  '__dataclass__init__fields__1__annotation',
2514
- '__dataclass__init__fields__2__annotation',
2515
- '__dataclass__init__fields__2__coerce',
2516
2893
  ),
2517
2894
  cls_names=(
2518
- ('omlish.inject.multis', 'MapBinding'),
2895
+ ('omlish.inject.helpers.wrappers', 'WrapperBinderHelper._Level'),
2519
2896
  ),
2520
2897
  )
2521
- def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2898
+ def _process_dataclass__5e1bef09da6295e8de9fe8f2ffad3a1a4e70d5a3():
2522
2899
  def _process_dataclass(
2523
2900
  *,
2524
2901
  __dataclass__cls,
2525
2902
  __dataclass__init__fields__0__annotation,
2526
- __dataclass__init__fields__0__validate,
2527
2903
  __dataclass__init__fields__1__annotation,
2528
- __dataclass__init__fields__2__annotation,
2529
- __dataclass__init__fields__2__coerce,
2530
2904
  __dataclass__FieldFnValidationError, # noqa
2531
2905
  __dataclass__FieldTypeValidationError, # noqa
2532
2906
  __dataclass__FnValidationError, # noqa
@@ -2545,9 +2919,8 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2545
2919
  if self.__class__ is not __dataclass__cls:
2546
2920
  raise TypeError(self)
2547
2921
  return __dataclass__cls( # noqa
2548
- multi_key=self.multi_key,
2549
- map_key=self.map_key,
2550
- dst=self.dst,
2922
+ root=self.root,
2923
+ level=self.level,
2551
2924
  )
2552
2925
 
2553
2926
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2561,9 +2934,8 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2561
2934
  if self.__class__ is not other.__class__:
2562
2935
  return NotImplemented
2563
2936
  return (
2564
- self.multi_key == other.multi_key and
2565
- self.map_key == other.map_key and
2566
- self.dst == other.dst
2937
+ self.root == other.root and
2938
+ self.level == other.level
2567
2939
  )
2568
2940
 
2569
2941
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -2572,9 +2944,8 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2572
2944
  setattr(__dataclass__cls, '__eq__', __eq__)
2573
2945
 
2574
2946
  __dataclass___setattr_frozen_fields = {
2575
- 'multi_key',
2576
- 'map_key',
2577
- 'dst',
2947
+ 'root',
2948
+ 'level',
2578
2949
  }
2579
2950
 
2580
2951
  def __setattr__(self, name, value):
@@ -2591,9 +2962,8 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2591
2962
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2592
2963
 
2593
2964
  __dataclass___delattr_frozen_fields = {
2594
- 'multi_key',
2595
- 'map_key',
2596
- 'dst',
2965
+ 'root',
2966
+ 'level',
2597
2967
  }
2598
2968
 
2599
2969
  def __delattr__(self, name):
@@ -2610,42 +2980,21 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2610
2980
  setattr(__dataclass__cls, '__delattr__', __delattr__)
2611
2981
 
2612
2982
  def __hash__(self):
2613
- try:
2614
- return self.__dataclass_hash__
2615
- except AttributeError:
2616
- pass
2617
- object.__setattr__(
2618
- self,
2619
- '__dataclass_hash__',
2620
- h := hash((
2621
- self.multi_key,
2622
- self.map_key,
2623
- self.dst,
2624
- ))
2625
- )
2626
- return h
2983
+ return hash((
2984
+ self.root,
2985
+ self.level,
2986
+ ))
2627
2987
 
2628
2988
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2629
2989
  setattr(__dataclass__cls, '__hash__', __hash__)
2630
2990
 
2631
2991
  def __init__(
2632
2992
  self,
2633
- multi_key: __dataclass__init__fields__0__annotation,
2634
- map_key: __dataclass__init__fields__1__annotation,
2635
- dst: __dataclass__init__fields__2__annotation,
2993
+ root: __dataclass__init__fields__0__annotation,
2994
+ level: __dataclass__init__fields__1__annotation,
2636
2995
  ) -> __dataclass__None:
2637
- dst = __dataclass__init__fields__2__coerce(dst)
2638
- if not __dataclass__init__fields__0__validate(multi_key):
2639
- raise __dataclass__FieldFnValidationError(
2640
- obj=self,
2641
- fn=__dataclass__init__fields__0__validate,
2642
- field='multi_key',
2643
- value=multi_key,
2644
- )
2645
- __dataclass__object_setattr(self, 'multi_key', multi_key)
2646
- __dataclass__object_setattr(self, 'map_key', map_key)
2647
- __dataclass__object_setattr(self, 'dst', dst)
2648
- self.__post_init__()
2996
+ __dataclass__object_setattr(self, 'root', root)
2997
+ __dataclass__object_setattr(self, 'level', level)
2649
2998
 
2650
2999
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2651
3000
  if '__init__' in __dataclass__cls.__dict__:
@@ -2655,9 +3004,8 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2655
3004
  @__dataclass___recursive_repr()
2656
3005
  def __repr__(self):
2657
3006
  parts = []
2658
- parts.append(f"multi_key={self.multi_key!r}")
2659
- parts.append(f"map_key={self.map_key!r}")
2660
- parts.append(f"dst={self.dst!r}")
3007
+ parts.append(f"root={self.root!r}")
3008
+ parts.append(f"level={self.level!r}")
2661
3009
  return (
2662
3010
  f"{self.__class__.__qualname__}("
2663
3011
  f"{', '.join(parts)}"
@@ -2674,30 +3022,31 @@ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
2674
3022
 
2675
3023
  @_register(
2676
3024
  plan_repr=(
2677
- "Plans(tup=(CopyPlan(fields=('multi_key',)), EqPlan(fields=('multi_key',)), FrozenPlan(fields=('multi_key',), a"
2678
- "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('multi_key',), cache=True), InitPlan(fields=("
2679
- "InitPlan.Field(name='multi_key', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_fact"
2680
- "ory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fie"
2681
- "lds.0.validate'), check_type=None),), self_param='self', std_params=('multi_key',), kw_only_params=(), frozen="
2682
- "True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name="
2683
- "'multi_key', kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
3025
+ "Plans(tup=(CopyPlan(fields=('p', 'kt')), FrozenPlan(fields=('p', 'kt'), allow_dynamic_dunder_attrs=False), Ini"
3026
+ "tPlan(fields=(InitPlan.Field(name='p', annotation=OpRef(name='init.fields.0.annotation'), default=None, defaul"
3027
+ "t_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_ty"
3028
+ "pe=None), InitPlan.Field(name='kt', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_f"
3029
+ "actory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type="
3030
+ "None)), self_param='self', std_params=('p', 'kt'), kw_only_params=(), frozen=True, slots=False, post_init_para"
3031
+ "ms=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='p', kw_only=False, fn=None), Rep"
3032
+ "rPlan.Field(name='kt', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
2684
3033
  ),
2685
- plan_repr_sha1='864a29bd231d03e4f0141a4dc7872a66df50771d',
3034
+ plan_repr_sha1='fd0f4351f533bc90a8c6f24973004fcc1931cf0d',
2686
3035
  op_ref_idents=(
2687
3036
  '__dataclass__init__fields__0__annotation',
2688
- '__dataclass__init__fields__0__validate',
3037
+ '__dataclass__init__fields__1__annotation',
2689
3038
  ),
2690
3039
  cls_names=(
2691
- ('omlish.inject.multis', 'MapProvider'),
2692
- ('omlish.inject.multis', 'SetProvider'),
3040
+ ('omlish.inject.impl.bindings', 'AsyncCallableProviderImpl'),
3041
+ ('omlish.inject.impl.bindings', 'CallableProviderImpl'),
2693
3042
  ),
2694
3043
  )
2695
- def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
3044
+ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
2696
3045
  def _process_dataclass(
2697
3046
  *,
2698
3047
  __dataclass__cls,
2699
3048
  __dataclass__init__fields__0__annotation,
2700
- __dataclass__init__fields__0__validate,
3049
+ __dataclass__init__fields__1__annotation,
2701
3050
  __dataclass__FieldFnValidationError, # noqa
2702
3051
  __dataclass__FieldTypeValidationError, # noqa
2703
3052
  __dataclass__FnValidationError, # noqa
@@ -2716,7 +3065,8 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2716
3065
  if self.__class__ is not __dataclass__cls:
2717
3066
  raise TypeError(self)
2718
3067
  return __dataclass__cls( # noqa
2719
- multi_key=self.multi_key,
3068
+ p=self.p,
3069
+ kt=self.kt,
2720
3070
  )
2721
3071
 
2722
3072
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2724,22 +3074,9 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2724
3074
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2725
3075
  setattr(__dataclass__cls, '__copy__', __copy__)
2726
3076
 
2727
- def __eq__(self, other):
2728
- if self is other:
2729
- return True
2730
- if self.__class__ is not other.__class__:
2731
- return NotImplemented
2732
- return (
2733
- self.multi_key == other.multi_key
2734
- )
2735
-
2736
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
2737
- if '__eq__' in __dataclass__cls.__dict__:
2738
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
2739
- setattr(__dataclass__cls, '__eq__', __eq__)
2740
-
2741
3077
  __dataclass___setattr_frozen_fields = {
2742
- 'multi_key',
3078
+ 'p',
3079
+ 'kt',
2743
3080
  }
2744
3081
 
2745
3082
  def __setattr__(self, name, value):
@@ -2756,7 +3093,8 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2756
3093
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2757
3094
 
2758
3095
  __dataclass___delattr_frozen_fields = {
2759
- 'multi_key',
3096
+ 'p',
3097
+ 'kt',
2760
3098
  }
2761
3099
 
2762
3100
  def __delattr__(self, name):
@@ -2772,35 +3110,13 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2772
3110
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
2773
3111
  setattr(__dataclass__cls, '__delattr__', __delattr__)
2774
3112
 
2775
- def __hash__(self):
2776
- try:
2777
- return self.__dataclass_hash__
2778
- except AttributeError:
2779
- pass
2780
- object.__setattr__(
2781
- self,
2782
- '__dataclass_hash__',
2783
- h := hash((
2784
- self.multi_key,
2785
- ))
2786
- )
2787
- return h
2788
-
2789
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2790
- setattr(__dataclass__cls, '__hash__', __hash__)
2791
-
2792
3113
  def __init__(
2793
3114
  self,
2794
- multi_key: __dataclass__init__fields__0__annotation,
3115
+ p: __dataclass__init__fields__0__annotation,
3116
+ kt: __dataclass__init__fields__1__annotation,
2795
3117
  ) -> __dataclass__None:
2796
- if not __dataclass__init__fields__0__validate(multi_key):
2797
- raise __dataclass__FieldFnValidationError(
2798
- obj=self,
2799
- fn=__dataclass__init__fields__0__validate,
2800
- field='multi_key',
2801
- value=multi_key,
2802
- )
2803
- __dataclass__object_setattr(self, 'multi_key', multi_key)
3118
+ __dataclass__object_setattr(self, 'p', p)
3119
+ __dataclass__object_setattr(self, 'kt', kt)
2804
3120
 
2805
3121
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2806
3122
  if '__init__' in __dataclass__cls.__dict__:
@@ -2810,7 +3126,8 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2810
3126
  @__dataclass___recursive_repr()
2811
3127
  def __repr__(self):
2812
3128
  parts = []
2813
- parts.append(f"multi_key={self.multi_key!r}")
3129
+ parts.append(f"p={self.p!r}")
3130
+ parts.append(f"kt={self.kt!r}")
2814
3131
  return (
2815
3132
  f"{self.__class__.__qualname__}("
2816
3133
  f"{', '.join(parts)}"
@@ -2827,29 +3144,45 @@ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
2827
3144
 
2828
3145
  @_register(
2829
3146
  plan_repr=(
2830
- "Plans(tup=(CopyPlan(fields=('elements',)), EqPlan(fields=('elements',)), FrozenPlan(fields=('elements',), allo"
2831
- "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('elements',), cache=True), InitPlan(fields=(Init"
2832
- "Plan.Field(name='elements', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=N"
2833
- "one, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), vali"
2834
- "date=None, check_type=None),), self_param='self', std_params=('elements',), kw_only_params=(), frozen=True, sl"
2835
- "ots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='elements'"
2836
- ", kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
3147
+ "Plans(tup=(CopyPlan(fields=('key', 'provider', 'scope', 'binding')), FrozenPlan(fields=('key', 'provider', 'sc"
3148
+ "ope', 'binding'), allow_dynamic_dunder_attrs=False), InitPlan(fields=(InitPlan.Field(name='key', annotation=Op"
3149
+ "Ref(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_typ"
3150
+ "e=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='provider', annotation"
3151
+ "=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_"
3152
+ "type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='scope', annotation"
3153
+ "=OpRef(name='init.fields.2.annotation'), default=OpRef(name='init.fields.2.default'), default_factory=None, in"
3154
+ "it=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan"
3155
+ ".Field(name='binding', annotation=OpRef(name='init.fields.3.annotation'), default=OpRef(name='init.fields.3.de"
3156
+ "fault'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate"
3157
+ "=None, check_type=None)), self_param='self', std_params=('key', 'provider', 'scope', 'binding'), kw_only_param"
3158
+ "s=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPla"
3159
+ "n.Field(name='key', kw_only=False, fn=None), ReprPlan.Field(name='provider', kw_only=False, fn=None), ReprPlan"
3160
+ ".Field(name='scope', kw_only=False, fn=None), ReprPlan.Field(name='binding', kw_only=False, fn=None)), id=Fals"
3161
+ "e, terse=False, default_fn=None)))"
2837
3162
  ),
2838
- plan_repr_sha1='8b45b0d38754c357aabee0be30419e40d1746bc4',
3163
+ plan_repr_sha1='3ea053d1a1090718f9d29a7824558f2ca9a77e31',
2839
3164
  op_ref_idents=(
2840
3165
  '__dataclass__init__fields__0__annotation',
2841
- '__dataclass__init__fields__0__coerce',
3166
+ '__dataclass__init__fields__1__annotation',
3167
+ '__dataclass__init__fields__2__annotation',
3168
+ '__dataclass__init__fields__2__default',
3169
+ '__dataclass__init__fields__3__annotation',
3170
+ '__dataclass__init__fields__3__default',
2842
3171
  ),
2843
3172
  cls_names=(
2844
- ('omlish.inject.binder', 'Private'),
3173
+ ('omlish.inject.impl.bindings', 'BindingImpl'),
2845
3174
  ),
2846
3175
  )
2847
- def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
3176
+ def _process_dataclass__3ea053d1a1090718f9d29a7824558f2ca9a77e31():
2848
3177
  def _process_dataclass(
2849
3178
  *,
2850
3179
  __dataclass__cls,
2851
3180
  __dataclass__init__fields__0__annotation,
2852
- __dataclass__init__fields__0__coerce,
3181
+ __dataclass__init__fields__1__annotation,
3182
+ __dataclass__init__fields__2__annotation,
3183
+ __dataclass__init__fields__2__default,
3184
+ __dataclass__init__fields__3__annotation,
3185
+ __dataclass__init__fields__3__default,
2853
3186
  __dataclass__FieldFnValidationError, # noqa
2854
3187
  __dataclass__FieldTypeValidationError, # noqa
2855
3188
  __dataclass__FnValidationError, # noqa
@@ -2868,7 +3201,10 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2868
3201
  if self.__class__ is not __dataclass__cls:
2869
3202
  raise TypeError(self)
2870
3203
  return __dataclass__cls( # noqa
2871
- elements=self.elements,
3204
+ key=self.key,
3205
+ provider=self.provider,
3206
+ scope=self.scope,
3207
+ binding=self.binding,
2872
3208
  )
2873
3209
 
2874
3210
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2876,22 +3212,11 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2876
3212
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
2877
3213
  setattr(__dataclass__cls, '__copy__', __copy__)
2878
3214
 
2879
- def __eq__(self, other):
2880
- if self is other:
2881
- return True
2882
- if self.__class__ is not other.__class__:
2883
- return NotImplemented
2884
- return (
2885
- self.elements == other.elements
2886
- )
2887
-
2888
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
2889
- if '__eq__' in __dataclass__cls.__dict__:
2890
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
2891
- setattr(__dataclass__cls, '__eq__', __eq__)
2892
-
2893
3215
  __dataclass___setattr_frozen_fields = {
2894
- 'elements',
3216
+ 'key',
3217
+ 'provider',
3218
+ 'scope',
3219
+ 'binding',
2895
3220
  }
2896
3221
 
2897
3222
  def __setattr__(self, name, value):
@@ -2908,7 +3233,10 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2908
3233
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2909
3234
 
2910
3235
  __dataclass___delattr_frozen_fields = {
2911
- 'elements',
3236
+ 'key',
3237
+ 'provider',
3238
+ 'scope',
3239
+ 'binding',
2912
3240
  }
2913
3241
 
2914
3242
  def __delattr__(self, name):
@@ -2919,35 +3247,22 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2919
3247
  raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
2920
3248
  super(__dataclass__cls, self).__delattr__(name)
2921
3249
 
2922
- __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
2923
- if '__delattr__' in __dataclass__cls.__dict__:
2924
- raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
2925
- setattr(__dataclass__cls, '__delattr__', __delattr__)
2926
-
2927
- def __hash__(self):
2928
- try:
2929
- return self.__dataclass_hash__
2930
- except AttributeError:
2931
- pass
2932
- object.__setattr__(
2933
- self,
2934
- '__dataclass_hash__',
2935
- h := hash((
2936
- self.elements,
2937
- ))
2938
- )
2939
- return h
2940
-
2941
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
2942
- setattr(__dataclass__cls, '__hash__', __hash__)
2943
-
3250
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
3251
+ if '__delattr__' in __dataclass__cls.__dict__:
3252
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
3253
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
3254
+
2944
3255
  def __init__(
2945
3256
  self,
2946
- elements: __dataclass__init__fields__0__annotation,
3257
+ key: __dataclass__init__fields__0__annotation,
3258
+ provider: __dataclass__init__fields__1__annotation,
3259
+ scope: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
3260
+ binding: __dataclass__init__fields__3__annotation = __dataclass__init__fields__3__default,
2947
3261
  ) -> __dataclass__None:
2948
- elements = __dataclass__init__fields__0__coerce(elements)
2949
- __dataclass__object_setattr(self, 'elements', elements)
2950
- self.__post_init__()
3262
+ __dataclass__object_setattr(self, 'key', key)
3263
+ __dataclass__object_setattr(self, 'provider', provider)
3264
+ __dataclass__object_setattr(self, 'scope', scope)
3265
+ __dataclass__object_setattr(self, 'binding', binding)
2951
3266
 
2952
3267
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2953
3268
  if '__init__' in __dataclass__cls.__dict__:
@@ -2957,7 +3272,10 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2957
3272
  @__dataclass___recursive_repr()
2958
3273
  def __repr__(self):
2959
3274
  parts = []
2960
- parts.append(f"elements={self.elements!r}")
3275
+ parts.append(f"key={self.key!r}")
3276
+ parts.append(f"provider={self.provider!r}")
3277
+ parts.append(f"scope={self.scope!r}")
3278
+ parts.append(f"binding={self.binding!r}")
2961
3279
  return (
2962
3280
  f"{self.__class__.__qualname__}("
2963
3281
  f"{', '.join(parts)}"
@@ -2974,22 +3292,24 @@ def _process_dataclass__8b45b0d38754c357aabee0be30419e40d1746bc4():
2974
3292
 
2975
3293
  @_register(
2976
3294
  plan_repr=(
2977
- "Plans(tup=(CopyPlan(fields=('impl',)), FrozenPlan(fields=('impl',), allow_dynamic_dunder_attrs=False), InitPla"
2978
- "n(fields=(InitPlan.Field(name='impl', annotation=OpRef(name='init.fields.0.annotation'), default=None, default"
2979
- "_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_typ"
2980
- "e=None),), self_param='self', std_params=('impl',), kw_only_params=(), frozen=True, slots=False, post_init_par"
2981
- "ams=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='impl', kw_only=False, fn=None),"
2982
- "), id=False, terse=False, default_fn=None)))"
3295
+ "Plans(tup=(CopyPlan(fields=('p',)), FrozenPlan(fields=('p',), allow_dynamic_dunder_attrs=False), InitPlan(fiel"
3296
+ "ds=(InitPlan.Field(name='p', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory="
3297
+ "None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),)"
3298
+ ", self_param='self', std_params=('p',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, in"
3299
+ "it_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='p', kw_only=False, fn=None),), id=False, te"
3300
+ "rse=False, default_fn=None)))"
2983
3301
  ),
2984
- plan_repr_sha1='8e1f31f368d04d4784c49dcc2d91408279e36285',
3302
+ plan_repr_sha1='365eedd17dff52bfa369a9578066fd43141c41fd',
2985
3303
  op_ref_idents=(
2986
3304
  '__dataclass__init__fields__0__annotation',
2987
3305
  ),
2988
3306
  cls_names=(
2989
- ('omlish.inject.impl.bindings', 'InternalProvider'),
3307
+ ('omlish.inject.impl.bindings', 'ConstProviderImpl'),
3308
+ ('omlish.inject.impl.bindings', 'LinkProviderImpl'),
3309
+ ('omlish.inject.impl.elements', 'ScopeSeededProviderImpl'),
2990
3310
  ),
2991
3311
  )
2992
- def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3312
+ def _process_dataclass__365eedd17dff52bfa369a9578066fd43141c41fd():
2993
3313
  def _process_dataclass(
2994
3314
  *,
2995
3315
  __dataclass__cls,
@@ -3012,7 +3332,7 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3012
3332
  if self.__class__ is not __dataclass__cls:
3013
3333
  raise TypeError(self)
3014
3334
  return __dataclass__cls( # noqa
3015
- impl=self.impl,
3335
+ p=self.p,
3016
3336
  )
3017
3337
 
3018
3338
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -3021,7 +3341,7 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3021
3341
  setattr(__dataclass__cls, '__copy__', __copy__)
3022
3342
 
3023
3343
  __dataclass___setattr_frozen_fields = {
3024
- 'impl',
3344
+ 'p',
3025
3345
  }
3026
3346
 
3027
3347
  def __setattr__(self, name, value):
@@ -3038,7 +3358,7 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3038
3358
  setattr(__dataclass__cls, '__setattr__', __setattr__)
3039
3359
 
3040
3360
  __dataclass___delattr_frozen_fields = {
3041
- 'impl',
3361
+ 'p',
3042
3362
  }
3043
3363
 
3044
3364
  def __delattr__(self, name):
@@ -3056,9 +3376,9 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3056
3376
 
3057
3377
  def __init__(
3058
3378
  self,
3059
- impl: __dataclass__init__fields__0__annotation,
3379
+ p: __dataclass__init__fields__0__annotation,
3060
3380
  ) -> __dataclass__None:
3061
- __dataclass__object_setattr(self, 'impl', impl)
3381
+ __dataclass__object_setattr(self, 'p', p)
3062
3382
 
3063
3383
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3064
3384
  if '__init__' in __dataclass__cls.__dict__:
@@ -3068,7 +3388,7 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3068
3388
  @__dataclass___recursive_repr()
3069
3389
  def __repr__(self):
3070
3390
  parts = []
3071
- parts.append(f"impl={self.impl!r}")
3391
+ parts.append(f"p={self.p!r}")
3072
3392
  return (
3073
3393
  f"{self.__class__.__qualname__}("
3074
3394
  f"{', '.join(parts)}"
@@ -3085,30 +3405,26 @@ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3085
3405
 
3086
3406
  @_register(
3087
3407
  plan_repr=(
3088
- "Plans(tup=(CopyPlan(fields=('key',)), EqPlan(fields=('key',)), FrozenPlan(fields=('key',), allow_dynamic_dunde"
3089
- "r_attrs=False), HashPlan(action='add', fields=('key',), cache=True), InitPlan(fields=(InitPlan.Field(name='key"
3090
- "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
3091
- "False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=Non"
3092
- "e),), self_param='self', std_params=('key',), kw_only_params=(), frozen=True, slots=False, post_init_params=()"
3093
- ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='key', kw_only=False, fn=None),), id=Fal"
3094
- "se, terse=False, default_fn=None)))"
3408
+ "Plans(tup=(CopyPlan(fields=('impl',)), FrozenPlan(fields=('impl',), allow_dynamic_dunder_attrs=False), InitPla"
3409
+ "n(fields=(InitPlan.Field(name='impl', annotation=OpRef(name='init.fields.0.annotation'), default=None, default"
3410
+ "_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_typ"
3411
+ "e=None),), self_param='self', std_params=('impl',), kw_only_params=(), frozen=True, slots=False, post_init_par"
3412
+ "ams=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='impl', kw_only=False, fn=None),"
3413
+ "), id=False, terse=False, default_fn=None)))"
3095
3414
  ),
3096
- plan_repr_sha1='95e8d2726657f6c6d0abe6bace53f80710e3d314',
3415
+ plan_repr_sha1='8e1f31f368d04d4784c49dcc2d91408279e36285',
3097
3416
  op_ref_idents=(
3098
3417
  '__dataclass__init__fields__0__annotation',
3099
- '__dataclass__init__fields__0__coerce',
3100
3418
  ),
3101
3419
  cls_names=(
3102
- ('omlish.inject.binder', 'Eager'),
3103
- ('omlish.inject.binder', 'Expose'),
3420
+ ('omlish.inject.impl.bindings', 'InternalProvider'),
3104
3421
  ),
3105
3422
  )
3106
- def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3423
+ def _process_dataclass__8e1f31f368d04d4784c49dcc2d91408279e36285():
3107
3424
  def _process_dataclass(
3108
3425
  *,
3109
3426
  __dataclass__cls,
3110
3427
  __dataclass__init__fields__0__annotation,
3111
- __dataclass__init__fields__0__coerce,
3112
3428
  __dataclass__FieldFnValidationError, # noqa
3113
3429
  __dataclass__FieldTypeValidationError, # noqa
3114
3430
  __dataclass__FnValidationError, # noqa
@@ -3127,7 +3443,7 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3127
3443
  if self.__class__ is not __dataclass__cls:
3128
3444
  raise TypeError(self)
3129
3445
  return __dataclass__cls( # noqa
3130
- key=self.key,
3446
+ impl=self.impl,
3131
3447
  )
3132
3448
 
3133
3449
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -3135,22 +3451,8 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3135
3451
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
3136
3452
  setattr(__dataclass__cls, '__copy__', __copy__)
3137
3453
 
3138
- def __eq__(self, other):
3139
- if self is other:
3140
- return True
3141
- if self.__class__ is not other.__class__:
3142
- return NotImplemented
3143
- return (
3144
- self.key == other.key
3145
- )
3146
-
3147
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
3148
- if '__eq__' in __dataclass__cls.__dict__:
3149
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
3150
- setattr(__dataclass__cls, '__eq__', __eq__)
3151
-
3152
3454
  __dataclass___setattr_frozen_fields = {
3153
- 'key',
3455
+ 'impl',
3154
3456
  }
3155
3457
 
3156
3458
  def __setattr__(self, name, value):
@@ -3167,7 +3469,7 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3167
3469
  setattr(__dataclass__cls, '__setattr__', __setattr__)
3168
3470
 
3169
3471
  __dataclass___delattr_frozen_fields = {
3170
- 'key',
3472
+ 'impl',
3171
3473
  }
3172
3474
 
3173
3475
  def __delattr__(self, name):
@@ -3183,30 +3485,11 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3183
3485
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
3184
3486
  setattr(__dataclass__cls, '__delattr__', __delattr__)
3185
3487
 
3186
- def __hash__(self):
3187
- try:
3188
- return self.__dataclass_hash__
3189
- except AttributeError:
3190
- pass
3191
- object.__setattr__(
3192
- self,
3193
- '__dataclass_hash__',
3194
- h := hash((
3195
- self.key,
3196
- ))
3197
- )
3198
- return h
3199
-
3200
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
3201
- setattr(__dataclass__cls, '__hash__', __hash__)
3202
-
3203
3488
  def __init__(
3204
3489
  self,
3205
- key: __dataclass__init__fields__0__annotation,
3490
+ impl: __dataclass__init__fields__0__annotation,
3206
3491
  ) -> __dataclass__None:
3207
- key = __dataclass__init__fields__0__coerce(key)
3208
- __dataclass__object_setattr(self, 'key', key)
3209
- self.__post_init__()
3492
+ __dataclass__object_setattr(self, 'impl', impl)
3210
3493
 
3211
3494
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3212
3495
  if '__init__' in __dataclass__cls.__dict__:
@@ -3216,7 +3499,7 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3216
3499
  @__dataclass___recursive_repr()
3217
3500
  def __repr__(self):
3218
3501
  parts = []
3219
- parts.append(f"key={self.key!r}")
3502
+ parts.append(f"impl={self.impl!r}")
3220
3503
  return (
3221
3504
  f"{self.__class__.__qualname__}("
3222
3505
  f"{', '.join(parts)}"
@@ -3233,29 +3516,26 @@ def _process_dataclass__95e8d2726657f6c6d0abe6bace53f80710e3d314():
3233
3516
 
3234
3517
  @_register(
3235
3518
  plan_repr=(
3236
- "Plans(tup=(CopyPlan(fields=('scope',)), EqPlan(fields=('scope',)), FrozenPlan(fields=('scope',), allow_dynamic"
3237
- "_dunder_attrs=False), HashPlan(action='add', fields=('scope',), cache=True), InitPlan(fields=(InitPlan.Field(n"
3238
- "ame='scope', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True,"
3239
- " override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, chec"
3240
- "k_type=None),), self_param='self', std_params=('scope',), kw_only_params=(), frozen=True, slots=False, post_in"
3241
- "it_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='scope', kw_only=False, fn=N"
3242
- "one),), id=False, terse=False, default_fn=None)))"
3519
+ "Plans(tup=(CopyPlan(fields=('es',)), FrozenPlan(fields=('es',), allow_dynamic_dunder_attrs=False), InitPlan(fi"
3520
+ "elds=(InitPlan.Field(name='es', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_facto"
3521
+ "ry=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None"
3522
+ "),), self_param='self', std_params=('es',), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
3523
+ ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='es', kw_only=False, fn=None),), id=Fals"
3524
+ "e, terse=False, default_fn=None)))"
3243
3525
  ),
3244
- plan_repr_sha1='a01535be51a62c3aedc3529e0204c6135d8d9e99',
3526
+ plan_repr_sha1='23940adf5b02820a6f9975e06728e5b58b744320',
3245
3527
  op_ref_idents=(
3246
3528
  '__dataclass__init__fields__0__annotation',
3247
- '__dataclass__init__fields__0__coerce',
3248
3529
  ),
3249
3530
  cls_names=(
3250
- ('omlish.inject.binder', 'ScopeBinding'),
3531
+ ('omlish.inject.impl.elements', 'MapProviderImpl'),
3251
3532
  ),
3252
3533
  )
3253
- def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3534
+ def _process_dataclass__23940adf5b02820a6f9975e06728e5b58b744320():
3254
3535
  def _process_dataclass(
3255
3536
  *,
3256
3537
  __dataclass__cls,
3257
3538
  __dataclass__init__fields__0__annotation,
3258
- __dataclass__init__fields__0__coerce,
3259
3539
  __dataclass__FieldFnValidationError, # noqa
3260
3540
  __dataclass__FieldTypeValidationError, # noqa
3261
3541
  __dataclass__FnValidationError, # noqa
@@ -3274,7 +3554,7 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3274
3554
  if self.__class__ is not __dataclass__cls:
3275
3555
  raise TypeError(self)
3276
3556
  return __dataclass__cls( # noqa
3277
- scope=self.scope,
3557
+ es=self.es,
3278
3558
  )
3279
3559
 
3280
3560
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -3282,22 +3562,8 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3282
3562
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
3283
3563
  setattr(__dataclass__cls, '__copy__', __copy__)
3284
3564
 
3285
- def __eq__(self, other):
3286
- if self is other:
3287
- return True
3288
- if self.__class__ is not other.__class__:
3289
- return NotImplemented
3290
- return (
3291
- self.scope == other.scope
3292
- )
3293
-
3294
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
3295
- if '__eq__' in __dataclass__cls.__dict__:
3296
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
3297
- setattr(__dataclass__cls, '__eq__', __eq__)
3298
-
3299
3565
  __dataclass___setattr_frozen_fields = {
3300
- 'scope',
3566
+ 'es',
3301
3567
  }
3302
3568
 
3303
3569
  def __setattr__(self, name, value):
@@ -3314,7 +3580,7 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3314
3580
  setattr(__dataclass__cls, '__setattr__', __setattr__)
3315
3581
 
3316
3582
  __dataclass___delattr_frozen_fields = {
3317
- 'scope',
3583
+ 'es',
3318
3584
  }
3319
3585
 
3320
3586
  def __delattr__(self, name):
@@ -3330,30 +3596,11 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3330
3596
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
3331
3597
  setattr(__dataclass__cls, '__delattr__', __delattr__)
3332
3598
 
3333
- def __hash__(self):
3334
- try:
3335
- return self.__dataclass_hash__
3336
- except AttributeError:
3337
- pass
3338
- object.__setattr__(
3339
- self,
3340
- '__dataclass_hash__',
3341
- h := hash((
3342
- self.scope,
3343
- ))
3344
- )
3345
- return h
3346
-
3347
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
3348
- setattr(__dataclass__cls, '__hash__', __hash__)
3349
-
3350
3599
  def __init__(
3351
3600
  self,
3352
- scope: __dataclass__init__fields__0__annotation,
3601
+ es: __dataclass__init__fields__0__annotation,
3353
3602
  ) -> __dataclass__None:
3354
- scope = __dataclass__init__fields__0__coerce(scope)
3355
- __dataclass__object_setattr(self, 'scope', scope)
3356
- self.__post_init__()
3603
+ __dataclass__object_setattr(self, 'es', es)
3357
3604
 
3358
3605
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3359
3606
  if '__init__' in __dataclass__cls.__dict__:
@@ -3363,7 +3610,7 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3363
3610
  @__dataclass___recursive_repr()
3364
3611
  def __repr__(self):
3365
3612
  parts = []
3366
- parts.append(f"scope={self.scope!r}")
3613
+ parts.append(f"es={self.es!r}")
3367
3614
  return (
3368
3615
  f"{self.__class__.__qualname__}("
3369
3616
  f"{', '.join(parts)}"
@@ -3380,30 +3627,34 @@ def _process_dataclass__a01535be51a62c3aedc3529e0204c6135d8d9e99():
3380
3627
 
3381
3628
  @_register(
3382
3629
  plan_repr=(
3383
- "Plans(tup=(CopyPlan(fields=('pik', 'k')), InitPlan(fields=(InitPlan.Field(name='pik', annotation=OpRef(name='i"
3384
- "nit.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType"
3385
- ".INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='k', annotation=OpRef(name='init."
3386
- "fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.INS"
3387
- "TANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('pik', 'k'), kw_only_para"
3388
- "ms=(), frozen=False, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprP"
3389
- "lan.Field(name='pik', kw_only=False, fn=None), ReprPlan.Field(name='k', kw_only=False, fn=None)), id=False, te"
3390
- "rse=False, default_fn=None)))"
3630
+ "Plans(tup=(CopyPlan(fields=('seeds', 'prvs')), EqPlan(fields=('seeds', 'prvs')), FrozenPlan(fields=('seeds', '"
3631
+ "prvs'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('seeds', 'prvs'), cache=False), Init"
3632
+ "Plan(fields=(InitPlan.Field(name='seeds', annotation=OpRef(name='init.fields.0.annotation'), default=None, def"
3633
+ "ault_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check"
3634
+ "_type=None), InitPlan.Field(name='prvs', annotation=OpRef(name='init.fields.1.annotation'), default=None, defa"
3635
+ "ult_factory=OpRef(name='init.fields.1.default_factory'), init=True, override=False, field_type=FieldType.INSTA"
3636
+ "NCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('seeds', 'prvs'), kw_only_p"
3637
+ "arams=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(Rep"
3638
+ "rPlan.Field(name='seeds', kw_only=False, fn=None), ReprPlan.Field(name='prvs', kw_only=False, fn=None)), id=Fa"
3639
+ "lse, terse=False, default_fn=None)))"
3391
3640
  ),
3392
- plan_repr_sha1='a0f40dc1d602e06fadec23a1aa53c8d57356f22f',
3641
+ plan_repr_sha1='61f34069d7091014f66ca9e1c1d27dbbc1a4e03f',
3393
3642
  op_ref_idents=(
3394
3643
  '__dataclass__init__fields__0__annotation',
3395
3644
  '__dataclass__init__fields__1__annotation',
3645
+ '__dataclass__init__fields__1__default_factory',
3396
3646
  ),
3397
3647
  cls_names=(
3398
- ('omlish.inject.impl.privates', 'ExposedPrivateProviderImpl'),
3648
+ ('omlish.inject.impl.elements', 'SeededScopeImpl.State'),
3399
3649
  ),
3400
3650
  )
3401
- def _process_dataclass__a0f40dc1d602e06fadec23a1aa53c8d57356f22f():
3651
+ def _process_dataclass__61f34069d7091014f66ca9e1c1d27dbbc1a4e03f():
3402
3652
  def _process_dataclass(
3403
3653
  *,
3404
3654
  __dataclass__cls,
3405
3655
  __dataclass__init__fields__0__annotation,
3406
3656
  __dataclass__init__fields__1__annotation,
3657
+ __dataclass__init__fields__1__default_factory,
3407
3658
  __dataclass__FieldFnValidationError, # noqa
3408
3659
  __dataclass__FieldTypeValidationError, # noqa
3409
3660
  __dataclass__FnValidationError, # noqa
@@ -3422,22 +3673,84 @@ def _process_dataclass__a0f40dc1d602e06fadec23a1aa53c8d57356f22f():
3422
3673
  if self.__class__ is not __dataclass__cls:
3423
3674
  raise TypeError(self)
3424
3675
  return __dataclass__cls( # noqa
3425
- pik=self.pik,
3426
- k=self.k,
3676
+ seeds=self.seeds,
3677
+ prvs=self.prvs,
3678
+ )
3679
+
3680
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
3681
+ if '__copy__' in __dataclass__cls.__dict__:
3682
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
3683
+ setattr(__dataclass__cls, '__copy__', __copy__)
3684
+
3685
+ def __eq__(self, other):
3686
+ if self is other:
3687
+ return True
3688
+ if self.__class__ is not other.__class__:
3689
+ return NotImplemented
3690
+ return (
3691
+ self.seeds == other.seeds and
3692
+ self.prvs == other.prvs
3427
3693
  )
3428
3694
 
3429
- __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
3430
- if '__copy__' in __dataclass__cls.__dict__:
3431
- raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
3432
- setattr(__dataclass__cls, '__copy__', __copy__)
3695
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
3696
+ if '__eq__' in __dataclass__cls.__dict__:
3697
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
3698
+ setattr(__dataclass__cls, '__eq__', __eq__)
3699
+
3700
+ __dataclass___setattr_frozen_fields = {
3701
+ 'seeds',
3702
+ 'prvs',
3703
+ }
3704
+
3705
+ def __setattr__(self, name, value):
3706
+ if (
3707
+ type(self) is __dataclass__cls
3708
+ or name in __dataclass___setattr_frozen_fields
3709
+ ):
3710
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
3711
+ super(__dataclass__cls, self).__setattr__(name, value)
3712
+
3713
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
3714
+ if '__setattr__' in __dataclass__cls.__dict__:
3715
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
3716
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
3717
+
3718
+ __dataclass___delattr_frozen_fields = {
3719
+ 'seeds',
3720
+ 'prvs',
3721
+ }
3722
+
3723
+ def __delattr__(self, name):
3724
+ if (
3725
+ type(self) is __dataclass__cls
3726
+ or name in __dataclass___delattr_frozen_fields
3727
+ ):
3728
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
3729
+ super(__dataclass__cls, self).__delattr__(name)
3730
+
3731
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
3732
+ if '__delattr__' in __dataclass__cls.__dict__:
3733
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
3734
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
3735
+
3736
+ def __hash__(self):
3737
+ return hash((
3738
+ self.seeds,
3739
+ self.prvs,
3740
+ ))
3741
+
3742
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
3743
+ setattr(__dataclass__cls, '__hash__', __hash__)
3433
3744
 
3434
3745
  def __init__(
3435
3746
  self,
3436
- pik: __dataclass__init__fields__0__annotation,
3437
- k: __dataclass__init__fields__1__annotation,
3747
+ seeds: __dataclass__init__fields__0__annotation,
3748
+ prvs: __dataclass__init__fields__1__annotation = __dataclass__HAS_DEFAULT_FACTORY,
3438
3749
  ) -> __dataclass__None:
3439
- self.pik = pik
3440
- self.k = k
3750
+ if prvs is __dataclass__HAS_DEFAULT_FACTORY:
3751
+ prvs = __dataclass__init__fields__1__default_factory()
3752
+ __dataclass__object_setattr(self, 'seeds', seeds)
3753
+ __dataclass__object_setattr(self, 'prvs', prvs)
3441
3754
 
3442
3755
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3443
3756
  if '__init__' in __dataclass__cls.__dict__:
@@ -3447,8 +3760,8 @@ def _process_dataclass__a0f40dc1d602e06fadec23a1aa53c8d57356f22f():
3447
3760
  @__dataclass___recursive_repr()
3448
3761
  def __repr__(self):
3449
3762
  parts = []
3450
- parts.append(f"pik={self.pik!r}")
3451
- parts.append(f"k={self.k!r}")
3763
+ parts.append(f"seeds={self.seeds!r}")
3764
+ parts.append(f"prvs={self.prvs!r}")
3452
3765
  return (
3453
3766
  f"{self.__class__.__qualname__}("
3454
3767
  f"{', '.join(parts)}"
@@ -3576,25 +3889,25 @@ def _process_dataclass__b721abb54732f14a7bceaf230a932d37b1a8ee48():
3576
3889
 
3577
3890
  @_register(
3578
3891
  plan_repr=(
3579
- "Plans(tup=(CopyPlan(fields=('id', 'ec')), InitPlan(fields=(InitPlan.Field(name='id', annotation=OpRef(name='in"
3580
- "it.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType."
3581
- "INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='ec', annotation=OpRef(name='init."
3892
+ "Plans(tup=(CopyPlan(fields=('pik', 'k')), InitPlan(fields=(InitPlan.Field(name='pik', annotation=OpRef(name='i"
3893
+ "nit.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType"
3894
+ ".INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='k', annotation=OpRef(name='init."
3582
3895
  "fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.INS"
3583
- "TANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('id', 'ec'), kw_only_para"
3896
+ "TANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('pik', 'k'), kw_only_para"
3584
3897
  "ms=(), frozen=False, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprP"
3585
- "lan.Field(name='id', kw_only=False, fn=None), ReprPlan.Field(name='ec', kw_only=False, fn=None)), id=False, te"
3898
+ "lan.Field(name='pik', kw_only=False, fn=None), ReprPlan.Field(name='k', kw_only=False, fn=None)), id=False, te"
3586
3899
  "rse=False, default_fn=None)))"
3587
3900
  ),
3588
- plan_repr_sha1='bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674',
3901
+ plan_repr_sha1='a0f40dc1d602e06fadec23a1aa53c8d57356f22f',
3589
3902
  op_ref_idents=(
3590
3903
  '__dataclass__init__fields__0__annotation',
3591
3904
  '__dataclass__init__fields__1__annotation',
3592
3905
  ),
3593
3906
  cls_names=(
3594
- ('omlish.inject.impl.privates', 'PrivateInjectorProviderImpl'),
3907
+ ('omlish.inject.impl.privates', 'ExposedPrivateProviderImpl'),
3595
3908
  ),
3596
3909
  )
3597
- def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
3910
+ def _process_dataclass__a0f40dc1d602e06fadec23a1aa53c8d57356f22f():
3598
3911
  def _process_dataclass(
3599
3912
  *,
3600
3913
  __dataclass__cls,
@@ -3618,8 +3931,8 @@ def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
3618
3931
  if self.__class__ is not __dataclass__cls:
3619
3932
  raise TypeError(self)
3620
3933
  return __dataclass__cls( # noqa
3621
- id=self.id,
3622
- ec=self.ec,
3934
+ pik=self.pik,
3935
+ k=self.k,
3623
3936
  )
3624
3937
 
3625
3938
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -3629,11 +3942,11 @@ def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
3629
3942
 
3630
3943
  def __init__(
3631
3944
  self,
3632
- id: __dataclass__init__fields__0__annotation,
3633
- ec: __dataclass__init__fields__1__annotation,
3945
+ pik: __dataclass__init__fields__0__annotation,
3946
+ k: __dataclass__init__fields__1__annotation,
3634
3947
  ) -> __dataclass__None:
3635
- self.id = id
3636
- self.ec = ec
3948
+ self.pik = pik
3949
+ self.k = k
3637
3950
 
3638
3951
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3639
3952
  if '__init__' in __dataclass__cls.__dict__:
@@ -3643,8 +3956,8 @@ def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
3643
3956
  @__dataclass___recursive_repr()
3644
3957
  def __repr__(self):
3645
3958
  parts = []
3646
- parts.append(f"id={self.id!r}")
3647
- parts.append(f"ec={self.ec!r}")
3959
+ parts.append(f"pik={self.pik!r}")
3960
+ parts.append(f"k={self.k!r}")
3648
3961
  return (
3649
3962
  f"{self.__class__.__qualname__}("
3650
3963
  f"{', '.join(parts)}"
@@ -3661,36 +3974,31 @@ def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
3661
3974
 
3662
3975
  @_register(
3663
3976
  plan_repr=(
3664
- "Plans(tup=(CopyPlan(fields=('src', 'ovr')), EqPlan(fields=('src', 'ovr')), FrozenPlan(fields=('src', 'ovr'), a"
3665
- "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('src', 'ovr'), cache=True), InitPlan(fields=("
3666
- "InitPlan.Field(name='src', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=No"
3667
- "ne, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), valid"
3668
- "ate=None, check_type=None), InitPlan.Field(name='ovr', annotation=OpRef(name='init.fields.1.annotation'), defa"
3669
- "ult=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='i"
3670
- "nit.fields.1.coerce'), validate=None, check_type=None)), self_param='self', std_params=('src', 'ovr'), kw_only"
3671
- "_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(Rep"
3672
- "rPlan.Field(name='src', kw_only=False, fn=None), ReprPlan.Field(name='ovr', kw_only=False, fn=None)), id=False"
3673
- ", terse=False, default_fn=None)))"
3977
+ "Plans(tup=(CopyPlan(fields=('owner', 'p')), EqPlan(fields=('owner', 'p')), FrozenPlan(fields=('owner', 'p'), a"
3978
+ "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('owner', 'p'), cache=False), InitPlan(fields="
3979
+ "(InitPlan.Field(name='owner', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory"
3980
+ "=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),"
3981
+ " InitPlan.Field(name='p', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=Non"
3982
+ "e, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None)), se"
3983
+ "lf_param='self', std_params=('owner', 'p'), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
3984
+ ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='owner', kw_only=False, fn=None), ReprPl"
3985
+ "an.Field(name='p', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
3674
3986
  ),
3675
- plan_repr_sha1='c35199aac6d207aea4ae186fa99b44f431914e53',
3987
+ plan_repr_sha1='0f6ba4c593adbc50913cf38fc7c075e91843dbde',
3676
3988
  op_ref_idents=(
3677
3989
  '__dataclass__init__fields__0__annotation',
3678
- '__dataclass__init__fields__0__coerce',
3679
3990
  '__dataclass__init__fields__1__annotation',
3680
- '__dataclass__init__fields__1__coerce',
3681
3991
  ),
3682
3992
  cls_names=(
3683
- ('omlish.inject.overrides', 'Overrides'),
3993
+ ('omlish.inject.impl.privates', 'PrivateInfo'),
3684
3994
  ),
3685
3995
  )
3686
- def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3996
+ def _process_dataclass__0f6ba4c593adbc50913cf38fc7c075e91843dbde():
3687
3997
  def _process_dataclass(
3688
3998
  *,
3689
3999
  __dataclass__cls,
3690
4000
  __dataclass__init__fields__0__annotation,
3691
- __dataclass__init__fields__0__coerce,
3692
4001
  __dataclass__init__fields__1__annotation,
3693
- __dataclass__init__fields__1__coerce,
3694
4002
  __dataclass__FieldFnValidationError, # noqa
3695
4003
  __dataclass__FieldTypeValidationError, # noqa
3696
4004
  __dataclass__FnValidationError, # noqa
@@ -3709,8 +4017,8 @@ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3709
4017
  if self.__class__ is not __dataclass__cls:
3710
4018
  raise TypeError(self)
3711
4019
  return __dataclass__cls( # noqa
3712
- src=self.src,
3713
- ovr=self.ovr,
4020
+ owner=self.owner,
4021
+ p=self.p,
3714
4022
  )
3715
4023
 
3716
4024
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -3724,8 +4032,8 @@ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3724
4032
  if self.__class__ is not other.__class__:
3725
4033
  return NotImplemented
3726
4034
  return (
3727
- self.src == other.src and
3728
- self.ovr == other.ovr
4035
+ self.owner == other.owner and
4036
+ self.p == other.p
3729
4037
  )
3730
4038
 
3731
4039
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -3734,8 +4042,8 @@ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3734
4042
  setattr(__dataclass__cls, '__eq__', __eq__)
3735
4043
 
3736
4044
  __dataclass___setattr_frozen_fields = {
3737
- 'src',
3738
- 'ovr',
4045
+ 'owner',
4046
+ 'p',
3739
4047
  }
3740
4048
 
3741
4049
  def __setattr__(self, name, value):
@@ -3752,8 +4060,8 @@ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3752
4060
  setattr(__dataclass__cls, '__setattr__', __setattr__)
3753
4061
 
3754
4062
  __dataclass___delattr_frozen_fields = {
3755
- 'src',
3756
- 'ovr',
4063
+ 'owner',
4064
+ 'p',
3757
4065
  }
3758
4066
 
3759
4067
  def __delattr__(self, name):
@@ -3770,145 +4078,21 @@ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
3770
4078
  setattr(__dataclass__cls, '__delattr__', __delattr__)
3771
4079
 
3772
4080
  def __hash__(self):
3773
- try:
3774
- return self.__dataclass_hash__
3775
- except AttributeError:
3776
- pass
3777
- object.__setattr__(
3778
- self,
3779
- '__dataclass_hash__',
3780
- h := hash((
3781
- self.src,
3782
- self.ovr,
3783
- ))
3784
- )
3785
- return h
4081
+ return hash((
4082
+ self.owner,
4083
+ self.p,
4084
+ ))
3786
4085
 
3787
4086
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
3788
4087
  setattr(__dataclass__cls, '__hash__', __hash__)
3789
4088
 
3790
4089
  def __init__(
3791
4090
  self,
3792
- src: __dataclass__init__fields__0__annotation,
3793
- ovr: __dataclass__init__fields__1__annotation,
3794
- ) -> __dataclass__None:
3795
- src = __dataclass__init__fields__0__coerce(src)
3796
- ovr = __dataclass__init__fields__1__coerce(ovr)
3797
- __dataclass__object_setattr(self, 'src', src)
3798
- __dataclass__object_setattr(self, 'ovr', ovr)
3799
- self.__post_init__()
3800
-
3801
- __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3802
- if '__init__' in __dataclass__cls.__dict__:
3803
- raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
3804
- setattr(__dataclass__cls, '__init__', __init__)
3805
-
3806
- @__dataclass___recursive_repr()
3807
- def __repr__(self):
3808
- parts = []
3809
- parts.append(f"src={self.src!r}")
3810
- parts.append(f"ovr={self.ovr!r}")
3811
- return (
3812
- f"{self.__class__.__qualname__}("
3813
- f"{', '.join(parts)}"
3814
- f")"
3815
- )
3816
-
3817
- __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
3818
- if '__repr__' in __dataclass__cls.__dict__:
3819
- raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
3820
- setattr(__dataclass__cls, '__repr__', __repr__)
3821
-
3822
- return _process_dataclass
3823
-
3824
-
3825
- @_register(
3826
- plan_repr=(
3827
- "Plans(tup=(CopyPlan(fields=('vs',)), FrozenPlan(fields=('vs',), allow_dynamic_dunder_attrs=False), InitPlan(fi"
3828
- "elds=(InitPlan.Field(name='vs', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_facto"
3829
- "ry=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None"
3830
- "),), self_param='self', std_params=('vs',), kw_only_params=(), frozen=True, slots=False, post_init_params=None"
3831
- ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='vs', kw_only=False, fn=None),), id=Fals"
3832
- "e, terse=False, default_fn=None)))"
3833
- ),
3834
- plan_repr_sha1='c4cee7449949f8c11b10dcaf6b91f62f28a6fd18',
3835
- op_ref_idents=(
3836
- '__dataclass__init__fields__0__annotation',
3837
- ),
3838
- cls_names=(
3839
- ('omlish.inject.helpers.multis', 'ItemsBinderHelper._ItemsBox'),
3840
- ),
3841
- )
3842
- def _process_dataclass__c4cee7449949f8c11b10dcaf6b91f62f28a6fd18():
3843
- def _process_dataclass(
3844
- *,
3845
- __dataclass__cls,
3846
- __dataclass__init__fields__0__annotation,
3847
- __dataclass__FieldFnValidationError, # noqa
3848
- __dataclass__FieldTypeValidationError, # noqa
3849
- __dataclass__FnValidationError, # noqa
3850
- __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
3851
- __dataclass__FunctionType=types.FunctionType, # noqa
3852
- __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
3853
- __dataclass__MISSING=dataclasses.MISSING, # noqa
3854
- __dataclass__None=None, # noqa
3855
- __dataclass__TypeError=TypeError, # noqa
3856
- __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
3857
- __dataclass__isinstance=isinstance, # noqa
3858
- __dataclass__object_setattr=object.__setattr__, # noqa
3859
- __dataclass__property=property, # noqa
3860
- ):
3861
- def __copy__(self):
3862
- if self.__class__ is not __dataclass__cls:
3863
- raise TypeError(self)
3864
- return __dataclass__cls( # noqa
3865
- vs=self.vs,
3866
- )
3867
-
3868
- __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
3869
- if '__copy__' in __dataclass__cls.__dict__:
3870
- raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
3871
- setattr(__dataclass__cls, '__copy__', __copy__)
3872
-
3873
- __dataclass___setattr_frozen_fields = {
3874
- 'vs',
3875
- }
3876
-
3877
- def __setattr__(self, name, value):
3878
- if (
3879
- type(self) is __dataclass__cls
3880
- or name in __dataclass___setattr_frozen_fields
3881
- ):
3882
- raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
3883
- super(__dataclass__cls, self).__setattr__(name, value)
3884
-
3885
- __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
3886
- if '__setattr__' in __dataclass__cls.__dict__:
3887
- raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
3888
- setattr(__dataclass__cls, '__setattr__', __setattr__)
3889
-
3890
- __dataclass___delattr_frozen_fields = {
3891
- 'vs',
3892
- }
3893
-
3894
- def __delattr__(self, name):
3895
- if (
3896
- type(self) is __dataclass__cls
3897
- or name in __dataclass___delattr_frozen_fields
3898
- ):
3899
- raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
3900
- super(__dataclass__cls, self).__delattr__(name)
3901
-
3902
- __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
3903
- if '__delattr__' in __dataclass__cls.__dict__:
3904
- raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
3905
- setattr(__dataclass__cls, '__delattr__', __delattr__)
3906
-
3907
- def __init__(
3908
- self,
3909
- vs: __dataclass__init__fields__0__annotation,
4091
+ owner: __dataclass__init__fields__0__annotation,
4092
+ p: __dataclass__init__fields__1__annotation,
3910
4093
  ) -> __dataclass__None:
3911
- __dataclass__object_setattr(self, 'vs', vs)
4094
+ __dataclass__object_setattr(self, 'owner', owner)
4095
+ __dataclass__object_setattr(self, 'p', p)
3912
4096
 
3913
4097
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
3914
4098
  if '__init__' in __dataclass__cls.__dict__:
@@ -3918,7 +4102,8 @@ def _process_dataclass__c4cee7449949f8c11b10dcaf6b91f62f28a6fd18():
3918
4102
  @__dataclass___recursive_repr()
3919
4103
  def __repr__(self):
3920
4104
  parts = []
3921
- parts.append(f"vs={self.vs!r}")
4105
+ parts.append(f"owner={self.owner!r}")
4106
+ parts.append(f"p={self.p!r}")
3922
4107
  return (
3923
4108
  f"{self.__class__.__qualname__}("
3924
4109
  f"{', '.join(parts)}"
@@ -4069,21 +4254,30 @@ def _process_dataclass__c5f6a36b3a0205325ea2602947f4888237a21382():
4069
4254
 
4070
4255
  @_register(
4071
4256
  plan_repr=(
4072
- "Plans(tup=(CopyPlan(fields=()), FrozenPlan(fields=(), allow_dynamic_dunder_attrs=False), InitPlan(fields=(), s"
4073
- "elf_param='self', std_params=(), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns="
4074
- "(), validate_fns=()), ReprPlan(fields=(), id=True, terse=False, default_fn=None)))"
4257
+ "Plans(tup=(CopyPlan(fields=('id', 'ec')), InitPlan(fields=(InitPlan.Field(name='id', annotation=OpRef(name='in"
4258
+ "it.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType."
4259
+ "INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='ec', annotation=OpRef(name='init."
4260
+ "fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.INS"
4261
+ "TANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('id', 'ec'), kw_only_para"
4262
+ "ms=(), frozen=False, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprP"
4263
+ "lan.Field(name='id', kw_only=False, fn=None), ReprPlan.Field(name='ec', kw_only=False, fn=None)), id=False, te"
4264
+ "rse=False, default_fn=None)))"
4265
+ ),
4266
+ plan_repr_sha1='bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674',
4267
+ op_ref_idents=(
4268
+ '__dataclass__init__fields__0__annotation',
4269
+ '__dataclass__init__fields__1__annotation',
4075
4270
  ),
4076
- plan_repr_sha1='c726b62427445e76234a6a472593ae91ca8d6457',
4077
- op_ref_idents=(),
4078
4271
  cls_names=(
4079
- ('omlish.inject.helpers.multis', 'ItemsBinderHelper._ItemTag'),
4080
- ('omlish.inject.helpers.wrappers', 'WrapperBinderHelper._Root'),
4272
+ ('omlish.inject.impl.privates', 'PrivateInjectorProviderImpl'),
4081
4273
  ),
4082
4274
  )
4083
- def _process_dataclass__c726b62427445e76234a6a472593ae91ca8d6457():
4275
+ def _process_dataclass__bbf0fd5802ba5ae35dd7ebcd29d05cb860a10674():
4084
4276
  def _process_dataclass(
4085
4277
  *,
4086
4278
  __dataclass__cls,
4279
+ __dataclass__init__fields__0__annotation,
4280
+ __dataclass__init__fields__1__annotation,
4087
4281
  __dataclass__FieldFnValidationError, # noqa
4088
4282
  __dataclass__FieldTypeValidationError, # noqa
4089
4283
  __dataclass__FnValidationError, # noqa
@@ -4101,41 +4295,23 @@ def _process_dataclass__c726b62427445e76234a6a472593ae91ca8d6457():
4101
4295
  def __copy__(self):
4102
4296
  if self.__class__ is not __dataclass__cls:
4103
4297
  raise TypeError(self)
4104
- return __dataclass__cls() # noqa
4298
+ return __dataclass__cls( # noqa
4299
+ id=self.id,
4300
+ ec=self.ec,
4301
+ )
4105
4302
 
4106
4303
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
4107
4304
  if '__copy__' in __dataclass__cls.__dict__:
4108
4305
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
4109
4306
  setattr(__dataclass__cls, '__copy__', __copy__)
4110
4307
 
4111
- def __setattr__(self, name, value):
4112
- if (
4113
- type(self) is __dataclass__cls
4114
- ):
4115
- raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
4116
- super(__dataclass__cls, self).__setattr__(name, value)
4117
-
4118
- __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
4119
- if '__setattr__' in __dataclass__cls.__dict__:
4120
- raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
4121
- setattr(__dataclass__cls, '__setattr__', __setattr__)
4122
-
4123
- def __delattr__(self, name):
4124
- if (
4125
- type(self) is __dataclass__cls
4126
- ):
4127
- raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
4128
- super(__dataclass__cls, self).__delattr__(name)
4129
-
4130
- __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
4131
- if '__delattr__' in __dataclass__cls.__dict__:
4132
- raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
4133
- setattr(__dataclass__cls, '__delattr__', __delattr__)
4134
-
4135
4308
  def __init__(
4136
4309
  self,
4310
+ id: __dataclass__init__fields__0__annotation,
4311
+ ec: __dataclass__init__fields__1__annotation,
4137
4312
  ) -> __dataclass__None:
4138
- pass
4313
+ self.id = id
4314
+ self.ec = ec
4139
4315
 
4140
4316
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4141
4317
  if '__init__' in __dataclass__cls.__dict__:
@@ -4145,8 +4321,10 @@ def _process_dataclass__c726b62427445e76234a6a472593ae91ca8d6457():
4145
4321
  @__dataclass___recursive_repr()
4146
4322
  def __repr__(self):
4147
4323
  parts = []
4324
+ parts.append(f"id={self.id!r}")
4325
+ parts.append(f"ec={self.ec!r}")
4148
4326
  return (
4149
- f"{self.__class__.__qualname__}@{hex(id(self))[2:]}("
4327
+ f"{self.__class__.__qualname__}("
4150
4328
  f"{', '.join(parts)}"
4151
4329
  f")"
4152
4330
  )
@@ -4161,29 +4339,27 @@ def _process_dataclass__c726b62427445e76234a6a472593ae91ca8d6457():
4161
4339
 
4162
4340
  @_register(
4163
4341
  plan_repr=(
4164
- "Plans(tup=(CopyPlan(fields=('ty',)), EqPlan(fields=('ty',)), FrozenPlan(fields=('ty',), allow_dynamic_dunder_a"
4165
- "ttrs=False), HashPlan(action='add', fields=('ty',), cache=True), InitPlan(fields=(InitPlan.Field(name='ty', an"
4166
- "notation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False"
4167
- ", field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=None),),"
4168
- " self_param='self', std_params=('ty',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, in"
4169
- "it_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='ty', kw_only=False, fn=None),), id=False, t"
4170
- "erse=False, default_fn=None)))"
4342
+ "Plans(tup=(CopyPlan(fields=('listener',)), EqPlan(fields=('listener',)), FrozenPlan(fields=('listener',), allo"
4343
+ "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('listener',), cache=True), InitPlan(fields=(Init"
4344
+ "Plan.Field(name='listener', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=N"
4345
+ "one, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),),"
4346
+ " self_param='self', std_params=('listener',), kw_only_params=(), frozen=True, slots=False, post_init_params=()"
4347
+ ", init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='listener', kw_only=False, fn=None),), i"
4348
+ "d=False, terse=False, default_fn=None)))"
4171
4349
  ),
4172
- plan_repr_sha1='d152f7efec7ea241cf364f9c170bbe40950b82d9',
4350
+ plan_repr_sha1='01ca4dd7c51876d086eb4230f400151c659e0842',
4173
4351
  op_ref_idents=(
4174
4352
  '__dataclass__init__fields__0__annotation',
4175
- '__dataclass__init__fields__0__coerce',
4176
4353
  ),
4177
4354
  cls_names=(
4178
- ('omlish.inject.binder', 'CtorProvider'),
4355
+ ('omlish.inject.listeners', 'ProvisionListenerBinding'),
4179
4356
  ),
4180
4357
  )
4181
- def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4358
+ def _process_dataclass__01ca4dd7c51876d086eb4230f400151c659e0842():
4182
4359
  def _process_dataclass(
4183
4360
  *,
4184
4361
  __dataclass__cls,
4185
4362
  __dataclass__init__fields__0__annotation,
4186
- __dataclass__init__fields__0__coerce,
4187
4363
  __dataclass__FieldFnValidationError, # noqa
4188
4364
  __dataclass__FieldTypeValidationError, # noqa
4189
4365
  __dataclass__FnValidationError, # noqa
@@ -4202,7 +4378,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4202
4378
  if self.__class__ is not __dataclass__cls:
4203
4379
  raise TypeError(self)
4204
4380
  return __dataclass__cls( # noqa
4205
- ty=self.ty,
4381
+ listener=self.listener,
4206
4382
  )
4207
4383
 
4208
4384
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -4216,7 +4392,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4216
4392
  if self.__class__ is not other.__class__:
4217
4393
  return NotImplemented
4218
4394
  return (
4219
- self.ty == other.ty
4395
+ self.listener == other.listener
4220
4396
  )
4221
4397
 
4222
4398
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -4225,7 +4401,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4225
4401
  setattr(__dataclass__cls, '__eq__', __eq__)
4226
4402
 
4227
4403
  __dataclass___setattr_frozen_fields = {
4228
- 'ty',
4404
+ 'listener',
4229
4405
  }
4230
4406
 
4231
4407
  def __setattr__(self, name, value):
@@ -4242,7 +4418,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4242
4418
  setattr(__dataclass__cls, '__setattr__', __setattr__)
4243
4419
 
4244
4420
  __dataclass___delattr_frozen_fields = {
4245
- 'ty',
4421
+ 'listener',
4246
4422
  }
4247
4423
 
4248
4424
  def __delattr__(self, name):
@@ -4267,7 +4443,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4267
4443
  self,
4268
4444
  '__dataclass_hash__',
4269
4445
  h := hash((
4270
- self.ty,
4446
+ self.listener,
4271
4447
  ))
4272
4448
  )
4273
4449
  return h
@@ -4277,10 +4453,10 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4277
4453
 
4278
4454
  def __init__(
4279
4455
  self,
4280
- ty: __dataclass__init__fields__0__annotation,
4456
+ listener: __dataclass__init__fields__0__annotation,
4281
4457
  ) -> __dataclass__None:
4282
- ty = __dataclass__init__fields__0__coerce(ty)
4283
- __dataclass__object_setattr(self, 'ty', ty)
4458
+ __dataclass__object_setattr(self, 'listener', listener)
4459
+ self.__post_init__()
4284
4460
 
4285
4461
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4286
4462
  if '__init__' in __dataclass__cls.__dict__:
@@ -4290,7 +4466,7 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4290
4466
  @__dataclass___recursive_repr()
4291
4467
  def __repr__(self):
4292
4468
  parts = []
4293
- parts.append(f"ty={self.ty!r}")
4469
+ parts.append(f"listener={self.listener!r}")
4294
4470
  return (
4295
4471
  f"{self.__class__.__qualname__}("
4296
4472
  f"{', '.join(parts)}"
@@ -4307,28 +4483,41 @@ def _process_dataclass__d152f7efec7ea241cf364f9c170bbe40950b82d9():
4307
4483
 
4308
4484
  @_register(
4309
4485
  plan_repr=(
4310
- "Plans(tup=(CopyPlan(fields=('lst',)), EqPlan(fields=('lst',)), FrozenPlan(fields=('lst',), allow_dynamic_dunde"
4311
- "r_attrs=False), HashPlan(action='add', fields=('lst',), cache=True), InitPlan(fields=(InitPlan.Field(name='lst"
4312
- "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
4313
- "False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),), self_param='self', std_p"
4314
- "arams=('lst',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns="
4315
- "()), ReprPlan(fields=(ReprPlan.Field(name='lst', kw_only=False, fn=None),), id=False, terse=False, default_fn="
4316
- "None)))"
4486
+ "Plans(tup=(CopyPlan(fields=('multi_key', 'map_key', 'dst')), EqPlan(fields=('multi_key', 'map_key', 'dst')), F"
4487
+ "rozenPlan(fields=('multi_key', 'map_key', 'dst'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fi"
4488
+ "elds=('multi_key', 'map_key', 'dst'), cache=True), InitPlan(fields=(InitPlan.Field(name='multi_key', annotatio"
4489
+ "n=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field"
4490
+ "_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fields.0.validate'), check_type=None), InitPl"
4491
+ "an.Field(name='map_key', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None"
4492
+ ", init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), Init"
4493
+ "Plan.Field(name='dst', annotation=OpRef(name='init.fields.2.annotation'), default=None, default_factory=None, "
4494
+ "init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.2.coerce'), validate="
4495
+ "None, check_type=None)), self_param='self', std_params=('multi_key', 'map_key', 'dst'), kw_only_params=(), fro"
4496
+ "zen=True, slots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(nam"
4497
+ "e='multi_key', kw_only=False, fn=None), ReprPlan.Field(name='map_key', kw_only=False, fn=None), ReprPlan.Field"
4498
+ "(name='dst', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
4317
4499
  ),
4318
- plan_repr_sha1='d1633dcd9bb962f0e548a4a63b764b808cdac621',
4500
+ plan_repr_sha1='6ed12b80942097addba0fe978453312450cdf8d9',
4319
4501
  op_ref_idents=(
4320
4502
  '__dataclass__init__fields__0__annotation',
4503
+ '__dataclass__init__fields__0__validate',
4504
+ '__dataclass__init__fields__1__annotation',
4505
+ '__dataclass__init__fields__2__annotation',
4506
+ '__dataclass__init__fields__2__coerce',
4321
4507
  ),
4322
4508
  cls_names=(
4323
- ('omlish.inject.binder', 'Origin'),
4324
- ('omlish.inject.binder', 'Origins'),
4509
+ ('omlish.inject.multis', 'MapBinding'),
4325
4510
  ),
4326
4511
  )
4327
- def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4512
+ def _process_dataclass__6ed12b80942097addba0fe978453312450cdf8d9():
4328
4513
  def _process_dataclass(
4329
4514
  *,
4330
4515
  __dataclass__cls,
4331
4516
  __dataclass__init__fields__0__annotation,
4517
+ __dataclass__init__fields__0__validate,
4518
+ __dataclass__init__fields__1__annotation,
4519
+ __dataclass__init__fields__2__annotation,
4520
+ __dataclass__init__fields__2__coerce,
4332
4521
  __dataclass__FieldFnValidationError, # noqa
4333
4522
  __dataclass__FieldTypeValidationError, # noqa
4334
4523
  __dataclass__FnValidationError, # noqa
@@ -4347,7 +4536,9 @@ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4347
4536
  if self.__class__ is not __dataclass__cls:
4348
4537
  raise TypeError(self)
4349
4538
  return __dataclass__cls( # noqa
4350
- lst=self.lst,
4539
+ multi_key=self.multi_key,
4540
+ map_key=self.map_key,
4541
+ dst=self.dst,
4351
4542
  )
4352
4543
 
4353
4544
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -4361,7 +4552,9 @@ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4361
4552
  if self.__class__ is not other.__class__:
4362
4553
  return NotImplemented
4363
4554
  return (
4364
- self.lst == other.lst
4555
+ self.multi_key == other.multi_key and
4556
+ self.map_key == other.map_key and
4557
+ self.dst == other.dst
4365
4558
  )
4366
4559
 
4367
4560
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -4370,7 +4563,9 @@ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4370
4563
  setattr(__dataclass__cls, '__eq__', __eq__)
4371
4564
 
4372
4565
  __dataclass___setattr_frozen_fields = {
4373
- 'lst',
4566
+ 'multi_key',
4567
+ 'map_key',
4568
+ 'dst',
4374
4569
  }
4375
4570
 
4376
4571
  def __setattr__(self, name, value):
@@ -4387,7 +4582,9 @@ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4387
4582
  setattr(__dataclass__cls, '__setattr__', __setattr__)
4388
4583
 
4389
4584
  __dataclass___delattr_frozen_fields = {
4390
- 'lst',
4585
+ 'multi_key',
4586
+ 'map_key',
4587
+ 'dst',
4391
4588
  }
4392
4589
 
4393
4590
  def __delattr__(self, name):
@@ -4411,115 +4608,35 @@ def _process_dataclass__d1633dcd9bb962f0e548a4a63b764b808cdac621():
4411
4608
  object.__setattr__(
4412
4609
  self,
4413
4610
  '__dataclass_hash__',
4414
- h := hash((
4415
- self.lst,
4416
- ))
4417
- )
4418
- return h
4419
-
4420
- __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
4421
- setattr(__dataclass__cls, '__hash__', __hash__)
4422
-
4423
- def __init__(
4424
- self,
4425
- lst: __dataclass__init__fields__0__annotation,
4426
- ) -> __dataclass__None:
4427
- __dataclass__object_setattr(self, 'lst', lst)
4428
-
4429
- __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4430
- if '__init__' in __dataclass__cls.__dict__:
4431
- raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
4432
- setattr(__dataclass__cls, '__init__', __init__)
4433
-
4434
- @__dataclass___recursive_repr()
4435
- def __repr__(self):
4436
- parts = []
4437
- parts.append(f"lst={self.lst!r}")
4438
- return (
4439
- f"{self.__class__.__qualname__}("
4440
- f"{', '.join(parts)}"
4441
- f")"
4442
- )
4443
-
4444
- __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
4445
- if '__repr__' in __dataclass__cls.__dict__:
4446
- raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
4447
- setattr(__dataclass__cls, '__repr__', __repr__)
4448
-
4449
- return _process_dataclass
4450
-
4451
-
4452
- @_register(
4453
- plan_repr=(
4454
- "Plans(tup=(CopyPlan(fields=('scope',)), EqPlan(fields=('scope',)), HashPlan(action='set_none', fields=None, ca"
4455
- "che=None), InitPlan(fields=(InitPlan.Field(name='scope', annotation=OpRef(name='init.fields.0.annotation'), de"
4456
- "fault=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, valid"
4457
- "ate=None, check_type=None),), self_param='self', std_params=('scope',), kw_only_params=(), frozen=False, slots"
4458
- "=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='scope', kw"
4459
- "_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
4460
- ),
4461
- plan_repr_sha1='d43eaf7e550de17fc6936c19e4e5aa545c8a93d8',
4462
- op_ref_idents=(
4463
- '__dataclass__init__fields__0__annotation',
4464
- ),
4465
- cls_names=(
4466
- ('omlish.inject.errors', 'ScopeAlreadyOpenError'),
4467
- ('omlish.inject.errors', 'ScopeError'),
4468
- ('omlish.inject.errors', 'ScopeNotOpenError'),
4469
- ),
4470
- )
4471
- def _process_dataclass__d43eaf7e550de17fc6936c19e4e5aa545c8a93d8():
4472
- def _process_dataclass(
4473
- *,
4474
- __dataclass__cls,
4475
- __dataclass__init__fields__0__annotation,
4476
- __dataclass__FieldFnValidationError, # noqa
4477
- __dataclass__FieldTypeValidationError, # noqa
4478
- __dataclass__FnValidationError, # noqa
4479
- __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
4480
- __dataclass__FunctionType=types.FunctionType, # noqa
4481
- __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
4482
- __dataclass__MISSING=dataclasses.MISSING, # noqa
4483
- __dataclass__None=None, # noqa
4484
- __dataclass__TypeError=TypeError, # noqa
4485
- __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
4486
- __dataclass__isinstance=isinstance, # noqa
4487
- __dataclass__object_setattr=object.__setattr__, # noqa
4488
- __dataclass__property=property, # noqa
4489
- ):
4490
- def __copy__(self):
4491
- if self.__class__ is not __dataclass__cls:
4492
- raise TypeError(self)
4493
- return __dataclass__cls( # noqa
4494
- scope=self.scope,
4495
- )
4496
-
4497
- __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
4498
- if '__copy__' in __dataclass__cls.__dict__:
4499
- raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
4500
- setattr(__dataclass__cls, '__copy__', __copy__)
4501
-
4502
- def __eq__(self, other):
4503
- if self is other:
4504
- return True
4505
- if self.__class__ is not other.__class__:
4506
- return NotImplemented
4507
- return (
4508
- self.scope == other.scope
4611
+ h := hash((
4612
+ self.multi_key,
4613
+ self.map_key,
4614
+ self.dst,
4615
+ ))
4509
4616
  )
4617
+ return h
4510
4618
 
4511
- __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
4512
- if '__eq__' in __dataclass__cls.__dict__:
4513
- raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
4514
- setattr(__dataclass__cls, '__eq__', __eq__)
4515
-
4516
- setattr(__dataclass__cls, '__hash__', None)
4619
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
4620
+ setattr(__dataclass__cls, '__hash__', __hash__)
4517
4621
 
4518
4622
  def __init__(
4519
4623
  self,
4520
- scope: __dataclass__init__fields__0__annotation,
4624
+ multi_key: __dataclass__init__fields__0__annotation,
4625
+ map_key: __dataclass__init__fields__1__annotation,
4626
+ dst: __dataclass__init__fields__2__annotation,
4521
4627
  ) -> __dataclass__None:
4522
- self.scope = scope
4628
+ dst = __dataclass__init__fields__2__coerce(dst)
4629
+ if not __dataclass__init__fields__0__validate(multi_key):
4630
+ raise __dataclass__FieldFnValidationError(
4631
+ obj=self,
4632
+ fn=__dataclass__init__fields__0__validate,
4633
+ field='multi_key',
4634
+ value=multi_key,
4635
+ )
4636
+ __dataclass__object_setattr(self, 'multi_key', multi_key)
4637
+ __dataclass__object_setattr(self, 'map_key', map_key)
4638
+ __dataclass__object_setattr(self, 'dst', dst)
4639
+ self.__post_init__()
4523
4640
 
4524
4641
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4525
4642
  if '__init__' in __dataclass__cls.__dict__:
@@ -4529,7 +4646,9 @@ def _process_dataclass__d43eaf7e550de17fc6936c19e4e5aa545c8a93d8():
4529
4646
  @__dataclass___recursive_repr()
4530
4647
  def __repr__(self):
4531
4648
  parts = []
4532
- parts.append(f"scope={self.scope!r}")
4649
+ parts.append(f"multi_key={self.multi_key!r}")
4650
+ parts.append(f"map_key={self.map_key!r}")
4651
+ parts.append(f"dst={self.dst!r}")
4533
4652
  return (
4534
4653
  f"{self.__class__.__qualname__}("
4535
4654
  f"{', '.join(parts)}"
@@ -4546,29 +4665,30 @@ def _process_dataclass__d43eaf7e550de17fc6936c19e4e5aa545c8a93d8():
4546
4665
 
4547
4666
  @_register(
4548
4667
  plan_repr=(
4549
- "Plans(tup=(CopyPlan(fields=('tag',)), EqPlan(fields=('tag',)), FrozenPlan(fields=('tag',), allow_dynamic_dunde"
4550
- "r_attrs=False), HashPlan(action='add', fields=('tag',), cache=True), InitPlan(fields=(InitPlan.Field(name='tag"
4551
- "', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override="
4552
- "False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=None, check_type=Non"
4553
- "e),), self_param='self', std_params=('tag',), kw_only_params=(), frozen=True, slots=False, post_init_params=No"
4554
- "ne, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='tag', kw_only=False, fn=None),), id=F"
4555
- "alse, terse=False, default_fn=None)))"
4668
+ "Plans(tup=(CopyPlan(fields=('multi_key',)), EqPlan(fields=('multi_key',)), FrozenPlan(fields=('multi_key',), a"
4669
+ "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('multi_key',), cache=True), InitPlan(fields=("
4670
+ "InitPlan.Field(name='multi_key', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_fact"
4671
+ "ory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=OpRef(name='init.fie"
4672
+ "lds.0.validate'), check_type=None),), self_param='self', std_params=('multi_key',), kw_only_params=(), frozen="
4673
+ "True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name="
4674
+ "'multi_key', kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
4556
4675
  ),
4557
- plan_repr_sha1='e3da1b32863a0a4aca9ff268877a77ad5d6dd328',
4676
+ plan_repr_sha1='864a29bd231d03e4f0141a4dc7872a66df50771d',
4558
4677
  op_ref_idents=(
4559
4678
  '__dataclass__init__fields__0__annotation',
4560
- '__dataclass__init__fields__0__coerce',
4679
+ '__dataclass__init__fields__0__validate',
4561
4680
  ),
4562
4681
  cls_names=(
4563
- ('omlish.inject.binder', 'SeededScope'),
4682
+ ('omlish.inject.multis', 'MapProvider'),
4683
+ ('omlish.inject.multis', 'SetProvider'),
4564
4684
  ),
4565
4685
  )
4566
- def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4686
+ def _process_dataclass__864a29bd231d03e4f0141a4dc7872a66df50771d():
4567
4687
  def _process_dataclass(
4568
4688
  *,
4569
4689
  __dataclass__cls,
4570
4690
  __dataclass__init__fields__0__annotation,
4571
- __dataclass__init__fields__0__coerce,
4691
+ __dataclass__init__fields__0__validate,
4572
4692
  __dataclass__FieldFnValidationError, # noqa
4573
4693
  __dataclass__FieldTypeValidationError, # noqa
4574
4694
  __dataclass__FnValidationError, # noqa
@@ -4587,7 +4707,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4587
4707
  if self.__class__ is not __dataclass__cls:
4588
4708
  raise TypeError(self)
4589
4709
  return __dataclass__cls( # noqa
4590
- tag=self.tag,
4710
+ multi_key=self.multi_key,
4591
4711
  )
4592
4712
 
4593
4713
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -4601,7 +4721,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4601
4721
  if self.__class__ is not other.__class__:
4602
4722
  return NotImplemented
4603
4723
  return (
4604
- self.tag == other.tag
4724
+ self.multi_key == other.multi_key
4605
4725
  )
4606
4726
 
4607
4727
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -4610,7 +4730,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4610
4730
  setattr(__dataclass__cls, '__eq__', __eq__)
4611
4731
 
4612
4732
  __dataclass___setattr_frozen_fields = {
4613
- 'tag',
4733
+ 'multi_key',
4614
4734
  }
4615
4735
 
4616
4736
  def __setattr__(self, name, value):
@@ -4627,7 +4747,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4627
4747
  setattr(__dataclass__cls, '__setattr__', __setattr__)
4628
4748
 
4629
4749
  __dataclass___delattr_frozen_fields = {
4630
- 'tag',
4750
+ 'multi_key',
4631
4751
  }
4632
4752
 
4633
4753
  def __delattr__(self, name):
@@ -4652,7 +4772,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4652
4772
  self,
4653
4773
  '__dataclass_hash__',
4654
4774
  h := hash((
4655
- self.tag,
4775
+ self.multi_key,
4656
4776
  ))
4657
4777
  )
4658
4778
  return h
@@ -4662,10 +4782,16 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4662
4782
 
4663
4783
  def __init__(
4664
4784
  self,
4665
- tag: __dataclass__init__fields__0__annotation,
4785
+ multi_key: __dataclass__init__fields__0__annotation,
4666
4786
  ) -> __dataclass__None:
4667
- tag = __dataclass__init__fields__0__coerce(tag)
4668
- __dataclass__object_setattr(self, 'tag', tag)
4787
+ if not __dataclass__init__fields__0__validate(multi_key):
4788
+ raise __dataclass__FieldFnValidationError(
4789
+ obj=self,
4790
+ fn=__dataclass__init__fields__0__validate,
4791
+ field='multi_key',
4792
+ value=multi_key,
4793
+ )
4794
+ __dataclass__object_setattr(self, 'multi_key', multi_key)
4669
4795
 
4670
4796
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4671
4797
  if '__init__' in __dataclass__cls.__dict__:
@@ -4675,7 +4801,7 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4675
4801
  @__dataclass___recursive_repr()
4676
4802
  def __repr__(self):
4677
4803
  parts = []
4678
- parts.append(f"tag={self.tag!r}")
4804
+ parts.append(f"multi_key={self.multi_key!r}")
4679
4805
  return (
4680
4806
  f"{self.__class__.__qualname__}("
4681
4807
  f"{', '.join(parts)}"
@@ -4692,40 +4818,36 @@ def _process_dataclass__e3da1b32863a0a4aca9ff268877a77ad5d6dd328():
4692
4818
 
4693
4819
  @_register(
4694
4820
  plan_repr=(
4695
- "Plans(tup=(CopyPlan(fields=('ty', 'tag')), EqPlan(fields=('ty', 'tag')), FrozenPlan(fields=('ty', 'tag'), allo"
4696
- "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('ty', 'tag'), cache=True), InitPlan(fields=(Init"
4697
- "Plan.Field(name='ty', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, i"
4698
- "nit=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), validate=N"
4699
- "one, check_type=None), InitPlan.Field(name='tag', annotation=OpRef(name='init.fields.1.annotation'), default=O"
4700
- "pRef(name='init.fields.1.default'), default_factory=None, init=True, override=False, field_type=FieldType.INST"
4701
- "ANCE, coerce=None, validate=OpRef(name='init.fields.1.validate'), check_type=None)), self_param='self', std_pa"
4702
- "rams=('ty',), kw_only_params=('tag',), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_"
4703
- "fns=()), ReprPlan(fields=(ReprPlan.Field(name='ty', kw_only=False, fn=None), ReprPlan.Field(name='tag', kw_onl"
4704
- "y=True, fn=OpRef(name='repr.fns.1.fn'))), id=False, terse=True, default_fn=None)))"
4821
+ "Plans(tup=(CopyPlan(fields=('multi_key', 'dst')), EqPlan(fields=('multi_key', 'dst')), FrozenPlan(fields=('mul"
4822
+ "ti_key', 'dst'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('multi_key', 'dst'), cache="
4823
+ "True), InitPlan(fields=(InitPlan.Field(name='multi_key', annotation=OpRef(name='init.fields.0.annotation'), de"
4824
+ "fault=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, valid"
4825
+ "ate=OpRef(name='init.fields.0.validate'), check_type=None), InitPlan.Field(name='dst', annotation=OpRef(name='"
4826
+ "init.fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldTyp"
4827
+ "e.INSTANCE, coerce=OpRef(name='init.fields.1.coerce'), validate=None, check_type=None)), self_param='self', st"
4828
+ "d_params=('multi_key', 'dst'), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), "
4829
+ "validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='multi_key', kw_only=False, fn=None), ReprPlan.Field(na"
4830
+ "me='dst', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
4705
4831
  ),
4706
- plan_repr_sha1='e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2',
4832
+ plan_repr_sha1='1ba38fd546769fabc04fa41bd279c7fcbbad22f2',
4707
4833
  op_ref_idents=(
4708
4834
  '__dataclass__init__fields__0__annotation',
4709
- '__dataclass__init__fields__0__coerce',
4835
+ '__dataclass__init__fields__0__validate',
4710
4836
  '__dataclass__init__fields__1__annotation',
4711
- '__dataclass__init__fields__1__default',
4712
- '__dataclass__init__fields__1__validate',
4713
- '__dataclass__repr__fns__1__fn',
4837
+ '__dataclass__init__fields__1__coerce',
4714
4838
  ),
4715
4839
  cls_names=(
4716
- ('omlish.inject.binder', 'Key'),
4840
+ ('omlish.inject.multis', 'SetBinding'),
4717
4841
  ),
4718
4842
  )
4719
- def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4843
+ def _process_dataclass__1ba38fd546769fabc04fa41bd279c7fcbbad22f2():
4720
4844
  def _process_dataclass(
4721
4845
  *,
4722
4846
  __dataclass__cls,
4723
4847
  __dataclass__init__fields__0__annotation,
4724
- __dataclass__init__fields__0__coerce,
4848
+ __dataclass__init__fields__0__validate,
4725
4849
  __dataclass__init__fields__1__annotation,
4726
- __dataclass__init__fields__1__default,
4727
- __dataclass__init__fields__1__validate,
4728
- __dataclass__repr__fns__1__fn,
4850
+ __dataclass__init__fields__1__coerce,
4729
4851
  __dataclass__FieldFnValidationError, # noqa
4730
4852
  __dataclass__FieldTypeValidationError, # noqa
4731
4853
  __dataclass__FnValidationError, # noqa
@@ -4744,8 +4866,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4744
4866
  if self.__class__ is not __dataclass__cls:
4745
4867
  raise TypeError(self)
4746
4868
  return __dataclass__cls( # noqa
4747
- ty=self.ty,
4748
- tag=self.tag,
4869
+ multi_key=self.multi_key,
4870
+ dst=self.dst,
4749
4871
  )
4750
4872
 
4751
4873
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -4759,8 +4881,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4759
4881
  if self.__class__ is not other.__class__:
4760
4882
  return NotImplemented
4761
4883
  return (
4762
- self.ty == other.ty and
4763
- self.tag == other.tag
4884
+ self.multi_key == other.multi_key and
4885
+ self.dst == other.dst
4764
4886
  )
4765
4887
 
4766
4888
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -4769,8 +4891,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4769
4891
  setattr(__dataclass__cls, '__eq__', __eq__)
4770
4892
 
4771
4893
  __dataclass___setattr_frozen_fields = {
4772
- 'ty',
4773
- 'tag',
4894
+ 'multi_key',
4895
+ 'dst',
4774
4896
  }
4775
4897
 
4776
4898
  def __setattr__(self, name, value):
@@ -4787,8 +4909,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4787
4909
  setattr(__dataclass__cls, '__setattr__', __setattr__)
4788
4910
 
4789
4911
  __dataclass___delattr_frozen_fields = {
4790
- 'ty',
4791
- 'tag',
4912
+ 'multi_key',
4913
+ 'dst',
4792
4914
  }
4793
4915
 
4794
4916
  def __delattr__(self, name):
@@ -4813,8 +4935,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4813
4935
  self,
4814
4936
  '__dataclass_hash__',
4815
4937
  h := hash((
4816
- self.ty,
4817
- self.tag,
4938
+ self.multi_key,
4939
+ self.dst,
4818
4940
  ))
4819
4941
  )
4820
4942
  return h
@@ -4824,20 +4946,20 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4824
4946
 
4825
4947
  def __init__(
4826
4948
  self,
4827
- ty: __dataclass__init__fields__0__annotation,
4828
- *,
4829
- tag: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
4949
+ multi_key: __dataclass__init__fields__0__annotation,
4950
+ dst: __dataclass__init__fields__1__annotation,
4830
4951
  ) -> __dataclass__None:
4831
- ty = __dataclass__init__fields__0__coerce(ty)
4832
- if not __dataclass__init__fields__1__validate(tag):
4952
+ dst = __dataclass__init__fields__1__coerce(dst)
4953
+ if not __dataclass__init__fields__0__validate(multi_key):
4833
4954
  raise __dataclass__FieldFnValidationError(
4834
4955
  obj=self,
4835
- fn=__dataclass__init__fields__1__validate,
4836
- field='tag',
4837
- value=tag,
4956
+ fn=__dataclass__init__fields__0__validate,
4957
+ field='multi_key',
4958
+ value=multi_key,
4838
4959
  )
4839
- __dataclass__object_setattr(self, 'ty', ty)
4840
- __dataclass__object_setattr(self, 'tag', tag)
4960
+ __dataclass__object_setattr(self, 'multi_key', multi_key)
4961
+ __dataclass__object_setattr(self, 'dst', dst)
4962
+ self.__post_init__()
4841
4963
 
4842
4964
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4843
4965
  if '__init__' in __dataclass__cls.__dict__:
@@ -4847,9 +4969,8 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4847
4969
  @__dataclass___recursive_repr()
4848
4970
  def __repr__(self):
4849
4971
  parts = []
4850
- parts.append(f"{self.ty!r}")
4851
- if (s := __dataclass__repr__fns__1__fn(self.tag)) is not None:
4852
- parts.append(f"tag={s}")
4972
+ parts.append(f"multi_key={self.multi_key!r}")
4973
+ parts.append(f"dst={self.dst!r}")
4853
4974
  return (
4854
4975
  f"{self.__class__.__qualname__}("
4855
4976
  f"{', '.join(parts)}"
@@ -4866,31 +4987,36 @@ def _process_dataclass__e780a7b78a8d3e5c6ddd87c0bc5ae50bda8d0db2():
4866
4987
 
4867
4988
  @_register(
4868
4989
  plan_repr=(
4869
- "Plans(tup=(CopyPlan(fields=('p', 'kt')), FrozenPlan(fields=('p', 'kt'), allow_dynamic_dunder_attrs=False), Ini"
4870
- "tPlan(fields=(InitPlan.Field(name='p', annotation=OpRef(name='init.fields.0.annotation'), default=None, defaul"
4871
- "t_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_ty"
4872
- "pe=None), InitPlan.Field(name='kt', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_f"
4873
- "actory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type="
4874
- "None)), self_param='self', std_params=('p', 'kt'), kw_only_params=(), frozen=True, slots=False, post_init_para"
4875
- "ms=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='p', kw_only=False, fn=None), Rep"
4876
- "rPlan.Field(name='kt', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
4990
+ "Plans(tup=(CopyPlan(fields=('src', 'ovr')), EqPlan(fields=('src', 'ovr')), FrozenPlan(fields=('src', 'ovr'), a"
4991
+ "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('src', 'ovr'), cache=True), InitPlan(fields=("
4992
+ "InitPlan.Field(name='src', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=No"
4993
+ "ne, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='init.fields.0.coerce'), valid"
4994
+ "ate=None, check_type=None), InitPlan.Field(name='ovr', annotation=OpRef(name='init.fields.1.annotation'), defa"
4995
+ "ult=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=OpRef(name='i"
4996
+ "nit.fields.1.coerce'), validate=None, check_type=None)), self_param='self', std_params=('src', 'ovr'), kw_only"
4997
+ "_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), validate_fns=()), ReprPlan(fields=(Rep"
4998
+ "rPlan.Field(name='src', kw_only=False, fn=None), ReprPlan.Field(name='ovr', kw_only=False, fn=None)), id=False"
4999
+ ", terse=False, default_fn=None)))"
4877
5000
  ),
4878
- plan_repr_sha1='fd0f4351f533bc90a8c6f24973004fcc1931cf0d',
5001
+ plan_repr_sha1='c35199aac6d207aea4ae186fa99b44f431914e53',
4879
5002
  op_ref_idents=(
4880
5003
  '__dataclass__init__fields__0__annotation',
5004
+ '__dataclass__init__fields__0__coerce',
4881
5005
  '__dataclass__init__fields__1__annotation',
5006
+ '__dataclass__init__fields__1__coerce',
4882
5007
  ),
4883
5008
  cls_names=(
4884
- ('omlish.inject.impl.bindings', 'AsyncCallableProviderImpl'),
4885
- ('omlish.inject.impl.bindings', 'CallableProviderImpl'),
5009
+ ('omlish.inject.overrides', 'Overrides'),
4886
5010
  ),
4887
5011
  )
4888
- def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
5012
+ def _process_dataclass__c35199aac6d207aea4ae186fa99b44f431914e53():
4889
5013
  def _process_dataclass(
4890
5014
  *,
4891
5015
  __dataclass__cls,
4892
5016
  __dataclass__init__fields__0__annotation,
5017
+ __dataclass__init__fields__0__coerce,
4893
5018
  __dataclass__init__fields__1__annotation,
5019
+ __dataclass__init__fields__1__coerce,
4894
5020
  __dataclass__FieldFnValidationError, # noqa
4895
5021
  __dataclass__FieldTypeValidationError, # noqa
4896
5022
  __dataclass__FnValidationError, # noqa
@@ -4909,8 +5035,8 @@ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
4909
5035
  if self.__class__ is not __dataclass__cls:
4910
5036
  raise TypeError(self)
4911
5037
  return __dataclass__cls( # noqa
4912
- p=self.p,
4913
- kt=self.kt,
5038
+ src=self.src,
5039
+ ovr=self.ovr,
4914
5040
  )
4915
5041
 
4916
5042
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -4918,9 +5044,24 @@ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
4918
5044
  raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
4919
5045
  setattr(__dataclass__cls, '__copy__', __copy__)
4920
5046
 
5047
+ def __eq__(self, other):
5048
+ if self is other:
5049
+ return True
5050
+ if self.__class__ is not other.__class__:
5051
+ return NotImplemented
5052
+ return (
5053
+ self.src == other.src and
5054
+ self.ovr == other.ovr
5055
+ )
5056
+
5057
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
5058
+ if '__eq__' in __dataclass__cls.__dict__:
5059
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
5060
+ setattr(__dataclass__cls, '__eq__', __eq__)
5061
+
4921
5062
  __dataclass___setattr_frozen_fields = {
4922
- 'p',
4923
- 'kt',
5063
+ 'src',
5064
+ 'ovr',
4924
5065
  }
4925
5066
 
4926
5067
  def __setattr__(self, name, value):
@@ -4937,8 +5078,8 @@ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
4937
5078
  setattr(__dataclass__cls, '__setattr__', __setattr__)
4938
5079
 
4939
5080
  __dataclass___delattr_frozen_fields = {
4940
- 'p',
4941
- 'kt',
5081
+ 'src',
5082
+ 'ovr',
4942
5083
  }
4943
5084
 
4944
5085
  def __delattr__(self, name):
@@ -4954,13 +5095,34 @@ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
4954
5095
  raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
4955
5096
  setattr(__dataclass__cls, '__delattr__', __delattr__)
4956
5097
 
5098
+ def __hash__(self):
5099
+ try:
5100
+ return self.__dataclass_hash__
5101
+ except AttributeError:
5102
+ pass
5103
+ object.__setattr__(
5104
+ self,
5105
+ '__dataclass_hash__',
5106
+ h := hash((
5107
+ self.src,
5108
+ self.ovr,
5109
+ ))
5110
+ )
5111
+ return h
5112
+
5113
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
5114
+ setattr(__dataclass__cls, '__hash__', __hash__)
5115
+
4957
5116
  def __init__(
4958
5117
  self,
4959
- p: __dataclass__init__fields__0__annotation,
4960
- kt: __dataclass__init__fields__1__annotation,
5118
+ src: __dataclass__init__fields__0__annotation,
5119
+ ovr: __dataclass__init__fields__1__annotation,
4961
5120
  ) -> __dataclass__None:
4962
- __dataclass__object_setattr(self, 'p', p)
4963
- __dataclass__object_setattr(self, 'kt', kt)
5121
+ src = __dataclass__init__fields__0__coerce(src)
5122
+ ovr = __dataclass__init__fields__1__coerce(ovr)
5123
+ __dataclass__object_setattr(self, 'src', src)
5124
+ __dataclass__object_setattr(self, 'ovr', ovr)
5125
+ self.__post_init__()
4964
5126
 
4965
5127
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
4966
5128
  if '__init__' in __dataclass__cls.__dict__:
@@ -4970,8 +5132,8 @@ def _process_dataclass__fd0f4351f533bc90a8c6f24973004fcc1931cf0d():
4970
5132
  @__dataclass___recursive_repr()
4971
5133
  def __repr__(self):
4972
5134
  parts = []
4973
- parts.append(f"p={self.p!r}")
4974
- parts.append(f"kt={self.kt!r}")
5135
+ parts.append(f"src={self.src!r}")
5136
+ parts.append(f"ovr={self.ovr!r}")
4975
5137
  return (
4976
5138
  f"{self.__class__.__qualname__}("
4977
5139
  f"{', '.join(parts)}"