ovld 0.5.9__tar.gz → 0.5.10__tar.gz
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.
- {ovld-0.5.9 → ovld-0.5.10}/PKG-INFO +1 -1
- {ovld-0.5.9 → ovld-0.5.10}/pyproject.toml +1 -1
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/core.py +82 -60
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/medley.py +10 -5
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/mro.py +2 -2
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/signatures.py +4 -5
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/typemap.py +4 -2
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/types.py +3 -3
- ovld-0.5.10/src/ovld/version.py +1 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_abc.py +8 -4
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_dependent.py +18 -4
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_medley.py +31 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_mro.py +6 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld/test_doc.txt +1 -2
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld/test_doc2.txt +1 -2
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld/test_method_doc.txt +1 -2
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld.py +19 -17
- {ovld-0.5.9 → ovld-0.5.10}/uv.lock +120 -81
- ovld-0.5.9/src/ovld/version.py +0 -1
- {ovld-0.5.9 → ovld-0.5.10}/.github/workflows/publish.yml +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/.github/workflows/python-package.yml +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/.gitignore +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/.python-version +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/.readthedocs.yaml +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/LICENSE +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/README.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/__init__.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/common.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/conftest.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_add.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_ast.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_calc.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_fib.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_multer.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_regexp.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_trivial.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/benchmarks/test_tweaknum.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/codegen.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/compare.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/dependent.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/features.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/index.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/medley.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/types.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/docs/usage.md +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/mkdocs.yml +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/__init__.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/abc.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/codegen.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/dependent.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/py.typed +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/recode.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/src/ovld/utils.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/__init__.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/modules/gingerbread.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_dataclass_gen.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_method.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_method_metaclass.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_method_per_instance.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_simple.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen/test_variant_generation.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_codegen.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_examples.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_global.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld/test_display.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_ovld/test_display_more.txt +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_typemap.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_types.py +0 -0
- {ovld-0.5.9 → ovld-0.5.10}/tests/test_utils.py +0 -0
@@ -25,6 +25,21 @@ from .utils import (
|
|
25
25
|
subtler_type,
|
26
26
|
)
|
27
27
|
|
28
|
+
_orig_getdoc = inspect.getdoc
|
29
|
+
|
30
|
+
|
31
|
+
def _getdoc(fn):
|
32
|
+
if hasattr(fn, "__calculate_doc__"):
|
33
|
+
if inspect.ismethod(fn):
|
34
|
+
fn = fn.__func__
|
35
|
+
fn.__doc__ = fn.__calculate_doc__()
|
36
|
+
del fn.__calculate_doc__
|
37
|
+
return _orig_getdoc(fn)
|
38
|
+
|
39
|
+
|
40
|
+
inspect.getdoc = _getdoc
|
41
|
+
|
42
|
+
|
28
43
|
_current_id = itertools.count()
|
29
44
|
|
30
45
|
|
@@ -72,8 +87,6 @@ class Ovld:
|
|
72
87
|
dispatch.
|
73
88
|
linkback: Whether to keep a pointer in the parent mixins to this
|
74
89
|
ovld so that updates can be propagated. (default: False)
|
75
|
-
allow_replacement: Allow replacing a method by another with the
|
76
|
-
same signature. (default: True)
|
77
90
|
"""
|
78
91
|
|
79
92
|
def __init__(
|
@@ -82,50 +95,43 @@ class Ovld:
|
|
82
95
|
mixins=[],
|
83
96
|
name=None,
|
84
97
|
linkback=False,
|
85
|
-
allow_replacement=True,
|
86
98
|
):
|
87
99
|
"""Initialize an Ovld."""
|
88
100
|
self.id = next(_current_id)
|
89
101
|
self.specialization_self = MISSING
|
90
102
|
self._compiled = False
|
103
|
+
self._signatures = None
|
104
|
+
self._argument_analysis = None
|
91
105
|
self.linkback = linkback
|
92
106
|
self.children = []
|
93
|
-
self.allow_replacement = allow_replacement
|
94
107
|
self.name = name
|
95
108
|
self.shortname = name or f"__OVLD{self.id}"
|
96
109
|
self.__name__ = name
|
97
|
-
self.
|
110
|
+
self._regs = {}
|
98
111
|
self._locked = False
|
99
112
|
self.mixins = []
|
100
|
-
self.argument_analysis = ArgumentAnalyzer()
|
101
113
|
self.dispatch = bootstrap_dispatch(self, name=self.shortname)
|
102
114
|
self.add_mixins(*mixins)
|
103
115
|
|
104
|
-
|
105
|
-
def defns(self):
|
106
|
-
defns = {}
|
116
|
+
def regs(self):
|
107
117
|
for mixin in self.mixins:
|
108
|
-
|
109
|
-
|
110
|
-
return defns
|
118
|
+
yield from mixin.regs()
|
119
|
+
yield from self._regs.items()
|
111
120
|
|
112
|
-
def
|
113
|
-
self.
|
114
|
-
for key, fn in list(self.defns.items()):
|
115
|
-
self.argument_analysis.add(fn)
|
116
|
-
self.argument_analysis.compile()
|
117
|
-
return self.argument_analysis
|
121
|
+
def empty(self):
|
122
|
+
return not self._regs and all(m.empty() for m in self.mixins)
|
118
123
|
|
119
124
|
def mkdoc(self):
|
125
|
+
fns = [f for f, _ in self.regs()]
|
120
126
|
try:
|
121
|
-
docs = [fn.__doc__ for fn in
|
127
|
+
docs = [fn.__doc__ for fn in fns if fn.__doc__]
|
122
128
|
if len(docs) == 1:
|
123
129
|
maindoc = docs[0]
|
124
130
|
else:
|
125
|
-
maindoc = f"Ovld with {len(
|
131
|
+
maindoc = f"Ovld with {len(fns)} methods."
|
126
132
|
|
127
133
|
doc = f"{maindoc}\n\n"
|
128
|
-
for fn in
|
134
|
+
for fn in fns:
|
129
135
|
fndef = inspect.signature(fn)
|
130
136
|
fdoc = fn.__doc__
|
131
137
|
if not fdoc or fdoc == maindoc:
|
@@ -192,17 +198,41 @@ class Ovld:
|
|
192
198
|
def __set_name__(self, inst, name):
|
193
199
|
self.rename(name)
|
194
200
|
|
195
|
-
def _set_attrs_from(self, fn):
|
196
|
-
"""Inherit relevant attributes from the function."""
|
197
|
-
if self.name is None:
|
198
|
-
self.__qualname__ = fn.__qualname__
|
199
|
-
self.__module__ = fn.__module__
|
200
|
-
self.rename(f"{fn.__module__}.{fn.__qualname__}", fn.__name__)
|
201
|
-
|
202
201
|
def ensure_compiled(self):
|
203
202
|
if not self._compiled:
|
204
203
|
self.compile()
|
205
204
|
|
205
|
+
@property
|
206
|
+
def signatures(self):
|
207
|
+
if self._signatures is None:
|
208
|
+
regs = {}
|
209
|
+
for fn, priority in self.regs():
|
210
|
+
ss = self.specialization_self
|
211
|
+
cgf = getattr(ss, "_ovld_codegen_fields", ())
|
212
|
+
lcl = {f: getattr(ss, f) for f in cgf}
|
213
|
+
sig = replace(Signature.extract(fn, lcl), priority=priority)
|
214
|
+
|
215
|
+
def _set(sig, fn):
|
216
|
+
if sig in regs:
|
217
|
+
# Push down the existing handler with a lower tiebreak
|
218
|
+
msig = replace(sig, tiebreak=sig.tiebreak - 1)
|
219
|
+
_set(msig, regs[sig])
|
220
|
+
regs[sig] = fn
|
221
|
+
|
222
|
+
_set(sig, fn)
|
223
|
+
self._signatures = regs
|
224
|
+
return self._signatures
|
225
|
+
|
226
|
+
@property
|
227
|
+
def argument_analysis(self):
|
228
|
+
if self._argument_analysis is None:
|
229
|
+
aa = ArgumentAnalyzer()
|
230
|
+
for sig in self.signatures:
|
231
|
+
aa.add(sig)
|
232
|
+
aa.compile()
|
233
|
+
self._argument_analysis = aa
|
234
|
+
return self._argument_analysis
|
235
|
+
|
206
236
|
def compile(self):
|
207
237
|
"""Finalize this overload.
|
208
238
|
|
@@ -223,7 +253,9 @@ class Ovld:
|
|
223
253
|
name = self.__name__
|
224
254
|
self.map = MultiTypeMap(name=name, key_error=self._key_error, ovld=self)
|
225
255
|
|
226
|
-
self.
|
256
|
+
for sig, fn in list(self.signatures.items()):
|
257
|
+
self.register_signature(sig, fn)
|
258
|
+
|
227
259
|
dispatch = generate_dispatch(self, self.argument_analysis)
|
228
260
|
self.dispatch.__code__ = rename_code(dispatch.__code__, self.shortname)
|
229
261
|
self.dispatch.__kwdefaults__ = dispatch.__kwdefaults__
|
@@ -231,10 +263,7 @@ class Ovld:
|
|
231
263
|
self.dispatch.__defaults__ = dispatch.__defaults__
|
232
264
|
self.dispatch.__globals__.update(dispatch.__globals__)
|
233
265
|
self.dispatch.map = self.map
|
234
|
-
self.dispatch.
|
235
|
-
|
236
|
-
for key, fn in list(self.defns.items()):
|
237
|
-
self.register_signature(key, fn)
|
266
|
+
self.dispatch.__generate_doc__ = self.mkdoc
|
238
267
|
|
239
268
|
self._compiled = True
|
240
269
|
|
@@ -275,42 +304,35 @@ class Ovld:
|
|
275
304
|
def _register(self, fn, priority):
|
276
305
|
"""Register a function."""
|
277
306
|
|
278
|
-
|
279
|
-
|
280
|
-
self._set_attrs_from(fn)
|
281
|
-
|
282
|
-
sig = replace(Signature.extract(fn), priority=priority)
|
283
|
-
if not self.allow_replacement and sig in self._defns:
|
284
|
-
raise TypeError(f"There is already a method for {sigstring(sig.types)}")
|
307
|
+
if not isinstance(priority, tuple):
|
308
|
+
priority = (priority,)
|
285
309
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
_set(sig, fn)
|
310
|
+
self._attempt_modify()
|
311
|
+
if self.name is None:
|
312
|
+
self.__qualname__ = fn.__qualname__
|
313
|
+
self.__module__ = fn.__module__
|
314
|
+
self.rename(f"{fn.__module__}.{fn.__qualname__}", fn.__name__)
|
315
|
+
self._regs[fn] = priority
|
294
316
|
|
295
|
-
self.
|
317
|
+
self.invalidate()
|
296
318
|
return self
|
297
319
|
|
298
320
|
def unregister(self, fn):
|
299
321
|
"""Unregister a function."""
|
300
322
|
self._attempt_modify()
|
301
|
-
|
302
|
-
self.
|
303
|
-
|
304
|
-
def
|
305
|
-
self.
|
323
|
+
del self._regs[fn]
|
324
|
+
self.invalidate()
|
325
|
+
|
326
|
+
def invalidate(self):
|
327
|
+
self._signatures = None
|
328
|
+
self._argument_analysis = None
|
329
|
+
if self._compiled:
|
330
|
+
self._compiled = False
|
331
|
+
self.dispatch.__code__ = self.dispatch.first_entry.__code__
|
306
332
|
for child in self.children:
|
307
|
-
child.
|
333
|
+
child.invalidate()
|
308
334
|
if hasattr(self, "dispatch"):
|
309
|
-
self.dispatch.
|
310
|
-
|
311
|
-
def reset(self):
|
312
|
-
self._compiled = False
|
313
|
-
self.dispatch.__code__ = self.dispatch.first_entry.__code__
|
335
|
+
self.dispatch.__calculate_doc__ = self.mkdoc
|
314
336
|
|
315
337
|
def copy(self, mixins=[], linkback=False):
|
316
338
|
"""Create a copy of this Ovld.
|
@@ -123,9 +123,9 @@ class BuildOvld(Combiner):
|
|
123
123
|
for f, arg in self.pending:
|
124
124
|
f(arg)
|
125
125
|
self.pending.clear()
|
126
|
-
if
|
126
|
+
if self.ovld.empty():
|
127
127
|
return ABSENT
|
128
|
-
self.ovld.
|
128
|
+
self.ovld.invalidate()
|
129
129
|
return self.ovld.dispatch
|
130
130
|
|
131
131
|
def copy(self):
|
@@ -337,15 +337,20 @@ _meld_classes_cache = {}
|
|
337
337
|
|
338
338
|
|
339
339
|
def meld_classes(classes):
|
340
|
+
def key(cls):
|
341
|
+
return getattr(cls, "_ovld_specialization_parent", None) or cls
|
342
|
+
|
340
343
|
medleys = {}
|
341
344
|
for cls in classes:
|
342
|
-
medleys.update({x:
|
345
|
+
medleys.update({key(x): x for x in getattr(cls, "_ovld_medleys", [cls])})
|
343
346
|
for cls in classes:
|
347
|
+
cls = key(cls)
|
344
348
|
if not hasattr(cls, "_ovld_medleys"):
|
345
349
|
for base in cls.mro():
|
346
350
|
if base is not cls and base in medleys:
|
347
351
|
del medleys[base]
|
348
|
-
|
352
|
+
|
353
|
+
medleys = tuple(medleys.values())
|
349
354
|
if len(medleys) == 1:
|
350
355
|
return medleys[0]
|
351
356
|
|
@@ -372,7 +377,7 @@ def meld_classes(classes):
|
|
372
377
|
|
373
378
|
result = make_dataclass(
|
374
379
|
cls_name="+".join(sorted(c.__name__ for c in medleys)),
|
375
|
-
bases=
|
380
|
+
bases=medleys,
|
376
381
|
fields=dc_fields,
|
377
382
|
kw_only=True,
|
378
383
|
namespace=merged,
|
@@ -118,8 +118,8 @@ def typeorder(t1, t2):
|
|
118
118
|
ords = [typeorder(a1, a2) for a1, a2 in zip(args1, args2)]
|
119
119
|
return Order.merge(ords)
|
120
120
|
|
121
|
-
if not isinstance(t1, type) or not isinstance(t2, type):
|
122
|
-
return Order.
|
121
|
+
if not isinstance(t1, type) or not isinstance(t2, type):
|
122
|
+
return Order.NONE
|
123
123
|
|
124
124
|
sx = issubclass(t1, t2)
|
125
125
|
sy = issubclass(t2, t1)
|
@@ -30,7 +30,7 @@ class LazySignature(inspect.Signature):
|
|
30
30
|
|
31
31
|
@property
|
32
32
|
def parameters(self):
|
33
|
-
anal = self.ovld.
|
33
|
+
anal = self.ovld.argument_analysis
|
34
34
|
parameters = []
|
35
35
|
if anal.is_method:
|
36
36
|
parameters.append(
|
@@ -117,7 +117,7 @@ class Signature:
|
|
117
117
|
arginfo: list[Arginfo] = field(default_factory=list, hash=False, compare=False)
|
118
118
|
|
119
119
|
@classmethod
|
120
|
-
def extract(cls, fn):
|
120
|
+
def extract(cls, fn, lcl={}):
|
121
121
|
typelist = []
|
122
122
|
sig = inspect.signature(fn)
|
123
123
|
max_pos = 0
|
@@ -135,7 +135,7 @@ class Signature:
|
|
135
135
|
is_method = True
|
136
136
|
continue
|
137
137
|
pos = nm = None
|
138
|
-
ann = normalize_type(param.annotation, fn)
|
138
|
+
ann = normalize_type(param.annotation, fn, lcl)
|
139
139
|
if param.kind is inspect._POSITIONAL_ONLY:
|
140
140
|
pos = i - is_method
|
141
141
|
typelist.append(ann)
|
@@ -188,9 +188,8 @@ class ArgumentAnalyzer:
|
|
188
188
|
self.is_method = None
|
189
189
|
self.done = False
|
190
190
|
|
191
|
-
def add(self,
|
191
|
+
def add(self, sig):
|
192
192
|
self.done = False
|
193
|
-
sig = Signature.extract(fn)
|
194
193
|
self.complex_transforms.update(arg.canonical for arg in sig.arginfo if arg.is_complex)
|
195
194
|
for arg in sig.arginfo:
|
196
195
|
if arg.position is not None:
|
@@ -242,7 +242,8 @@ class MultiTypeMap(dict):
|
|
242
242
|
self.maps[-1].register(object, entry)
|
243
243
|
|
244
244
|
def display_methods(self):
|
245
|
-
for h, prio in sorted(self.priorities.items(), key=lambda kv:
|
245
|
+
for h, prio in sorted(self.priorities.items(), key=lambda kv: kv[1], reverse=True):
|
246
|
+
prio = ":".join(map(str, prio))
|
246
247
|
prio = f"[{prio}]"
|
247
248
|
width = 6
|
248
249
|
print(f"{prio:{width}} \033[1m{h.__name__}\033[0m")
|
@@ -306,7 +307,8 @@ class MultiTypeMap(dict):
|
|
306
307
|
color = "\033[1;32m"
|
307
308
|
rank += 1
|
308
309
|
spec = ".".join(map(str, c.specificity))
|
309
|
-
|
310
|
+
prios = ":".join(map(str, c.priority))
|
311
|
+
lvl = f"[{prios}:{spec}]"
|
310
312
|
width = 2 * len(args) + 6
|
311
313
|
print(f"{color}{bullet} {lvl:{width}} {handler.__name__}")
|
312
314
|
co = handler.__code__
|
@@ -25,7 +25,7 @@ def eval_annotation(t, ctx, locals, catch=False):
|
|
25
25
|
else: # pragma: no cover
|
26
26
|
glb = {}
|
27
27
|
return eval(t, glb, locals)
|
28
|
-
else:
|
28
|
+
else: # pragma: no cover
|
29
29
|
return t
|
30
30
|
except Exception: # pragma: no cover
|
31
31
|
if catch:
|
@@ -43,11 +43,11 @@ class TypeNormalizer:
|
|
43
43
|
else:
|
44
44
|
self.generic_handlers.register(generic, handler)
|
45
45
|
|
46
|
-
def __call__(self, t, fn):
|
46
|
+
def __call__(self, t, fn, lcl={}):
|
47
47
|
from .dependent import DependentType
|
48
48
|
|
49
49
|
if isinstance(t, str):
|
50
|
-
t = eval_annotation(t, fn,
|
50
|
+
t = eval_annotation(t, fn, lcl)
|
51
51
|
|
52
52
|
if t is type:
|
53
53
|
t = type[object]
|
@@ -0,0 +1 @@
|
|
1
|
+
version = "0.5.10"
|
@@ -30,16 +30,20 @@ def test_literal():
|
|
30
30
|
assert f(4) == "nah"
|
31
31
|
|
32
32
|
|
33
|
+
def f_i(i):
|
34
|
+
def f(x: Literal[i]):
|
35
|
+
return x * x
|
36
|
+
|
37
|
+
return f
|
38
|
+
|
39
|
+
|
33
40
|
def test_many_literals():
|
34
41
|
f = Ovld()
|
35
42
|
|
36
43
|
n = 10
|
37
44
|
|
38
45
|
for i in range(n):
|
39
|
-
|
40
|
-
@ovld
|
41
|
-
def f(x: Literal[i]):
|
42
|
-
return x * x
|
46
|
+
f.register(f_i(i))
|
43
47
|
|
44
48
|
for i in range(n):
|
45
49
|
assert f(i) == i * i
|
@@ -337,11 +337,25 @@ def test_keyed_plus_other():
|
|
337
337
|
# Tests a failure mode of generating dispatch code like HANDLER = HANDLERS[x]
|
338
338
|
# if you also have to check a condition on y.
|
339
339
|
|
340
|
-
|
340
|
+
@ovld
|
341
|
+
def f(x: Literal[0], y: Bounded[0, 100]):
|
342
|
+
return "yes"
|
341
343
|
|
342
|
-
|
343
|
-
|
344
|
-
|
344
|
+
@ovld
|
345
|
+
def f(x: Literal[1], y: Bounded[0, 100]):
|
346
|
+
return "yes"
|
347
|
+
|
348
|
+
@ovld
|
349
|
+
def f(x: Literal[2], y: Bounded[0, 100]):
|
350
|
+
return "yes"
|
351
|
+
|
352
|
+
@ovld
|
353
|
+
def f(x: Literal[3], y: Bounded[0, 100]):
|
354
|
+
return "yes"
|
355
|
+
|
356
|
+
@ovld
|
357
|
+
def f(x: Literal[4], y: Bounded[0, 100]):
|
358
|
+
return "yes"
|
345
359
|
|
346
360
|
@ovld
|
347
361
|
def f(x: int, y: int):
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import sys
|
2
4
|
from dataclasses import field, replace
|
3
5
|
from typing import Counter
|
@@ -7,6 +9,7 @@ import pytest
|
|
7
9
|
from ovld import recurse
|
8
10
|
from ovld.codegen import Code, Lambda, code_generator
|
9
11
|
from ovld.core import ovld
|
12
|
+
from ovld.dependent import Regexp
|
10
13
|
from ovld.medley import (
|
11
14
|
BuildOvld,
|
12
15
|
ChainAll,
|
@@ -541,3 +544,31 @@ def test_default_factory_inheritance():
|
|
541
544
|
|
542
545
|
lu = Lust()
|
543
546
|
assert lu.xs == []
|
547
|
+
|
548
|
+
|
549
|
+
class Monkey(Medley):
|
550
|
+
regex: CodegenParameter[str] = "monk[iey]+"
|
551
|
+
|
552
|
+
def hi(self, x: Regexp[regex]):
|
553
|
+
return "hello!"
|
554
|
+
|
555
|
+
def hi(self, x: str):
|
556
|
+
return "goodbye!"
|
557
|
+
|
558
|
+
|
559
|
+
def test_configure_dependent():
|
560
|
+
m1 = Monkey()
|
561
|
+
m2 = Monkey(regex="go+rilla")
|
562
|
+
|
563
|
+
assert m1.hi("monki") == "hello!"
|
564
|
+
assert m1.hi("monkeeeee") == "hello!"
|
565
|
+
assert m1.hi("goorilla") == "goodbye!"
|
566
|
+
|
567
|
+
assert m2.hi("monki") == "goodbye!"
|
568
|
+
assert m2.hi("monkeeeee") == "goodbye!"
|
569
|
+
assert m2.hi("goorilla") == "hello!"
|
570
|
+
|
571
|
+
|
572
|
+
def test_configure_dependent_pileon():
|
573
|
+
m = Monkey(regex="chimpanze+") + Monkey(regex="go+rilla")
|
574
|
+
assert m.hi("goorilla") == "hello!"
|
@@ -9,6 +9,7 @@ from ovld.mro import Order, subclasscheck, typeorder
|
|
9
9
|
from ovld.types import (
|
10
10
|
All,
|
11
11
|
Dataclass,
|
12
|
+
HasMethod,
|
12
13
|
Intersection,
|
13
14
|
Order,
|
14
15
|
Union,
|
@@ -170,6 +171,11 @@ def test_typeorder_any():
|
|
170
171
|
assert typeorder(Any, Any) is Order.SAME
|
171
172
|
|
172
173
|
|
174
|
+
def test_typeorder_exotic():
|
175
|
+
assert typeorder(HasMethod["meth"], Annotated) is Order.NONE
|
176
|
+
assert typeorder(Annotated, HasMethod["meth"]) is Order.NONE
|
177
|
+
|
178
|
+
|
173
179
|
@dataclass(frozen=True)
|
174
180
|
class Anno:
|
175
181
|
name: str
|
@@ -809,6 +809,20 @@ def test_priority():
|
|
809
809
|
assert f([1, "x"]) == ["TOP", [["TOP", 2], ["TOP", "BOTTOM"]]]
|
810
810
|
|
811
811
|
|
812
|
+
def test_priority_tuple():
|
813
|
+
f = Ovld()
|
814
|
+
|
815
|
+
@f.register(priority=(1, 2))
|
816
|
+
def f(x: object):
|
817
|
+
return ["TOP", call_next(x)]
|
818
|
+
|
819
|
+
@f.register(priority=(1, 1))
|
820
|
+
def f(x: object):
|
821
|
+
return "BOTTOM"
|
822
|
+
|
823
|
+
assert f(123) == ["TOP", "BOTTOM"]
|
824
|
+
|
825
|
+
|
812
826
|
def test_resolve_for_values():
|
813
827
|
f = Ovld()
|
814
828
|
|
@@ -1146,18 +1160,6 @@ def test_replacement():
|
|
1146
1160
|
assert f(5) == 2
|
1147
1161
|
|
1148
1162
|
|
1149
|
-
def test_disallow_replacement():
|
1150
|
-
@ovld(allow_replacement=False)
|
1151
|
-
def f(x: int):
|
1152
|
-
pass
|
1153
|
-
|
1154
|
-
with pytest.raises(TypeError):
|
1155
|
-
|
1156
|
-
@f.register
|
1157
|
-
def f2(x: int):
|
1158
|
-
pass
|
1159
|
-
|
1160
|
-
|
1161
1163
|
def test_unregister():
|
1162
1164
|
@ovld
|
1163
1165
|
def f(xs: list):
|
@@ -1819,12 +1821,12 @@ def test_doc(file_regression):
|
|
1819
1821
|
return None
|
1820
1822
|
|
1821
1823
|
doc = f"{mushroom.__name__}{inspect.signature(mushroom)}\n\n"
|
1822
|
-
doc += mushroom
|
1824
|
+
doc += inspect.getdoc(mushroom)
|
1823
1825
|
|
1824
1826
|
file_regression.check(doc)
|
1825
1827
|
|
1826
|
-
assert mushroom
|
1827
|
-
assert mushroom
|
1828
|
+
assert inspect.getdoc(mushroom) == inspect.getdoc(mushroom.__ovld__)
|
1829
|
+
assert inspect.signature(mushroom) == inspect.signature(mushroom.__ovld__)
|
1828
1830
|
|
1829
1831
|
|
1830
1832
|
def test_doc2(file_regression):
|
@@ -1841,7 +1843,7 @@ def test_doc2(file_regression):
|
|
1841
1843
|
def mushroom(x: str, y: object, *, beauty, bigness):
|
1842
1844
|
return None
|
1843
1845
|
|
1844
|
-
doc = mushroom
|
1846
|
+
doc = inspect.getdoc(mushroom)
|
1845
1847
|
doc = f"{mushroom.__name__}{inspect.signature(mushroom)}\n\n" + doc
|
1846
1848
|
|
1847
1849
|
file_regression.check(doc)
|
@@ -1863,7 +1865,7 @@ def test_method_doc(file_regression):
|
|
1863
1865
|
return None
|
1864
1866
|
|
1865
1867
|
mushroom = Mushroom()
|
1866
|
-
doc = mushroom.rise
|
1868
|
+
doc = inspect.getdoc(mushroom.rise)
|
1867
1869
|
doc = f"{mushroom.rise.__name__}{inspect.signature(mushroom.rise)}\n\n" + doc
|
1868
1870
|
|
1869
1871
|
file_regression.check(doc)
|
@@ -65,76 +65,97 @@ wheels = [
|
|
65
65
|
|
66
66
|
[[package]]
|
67
67
|
name = "coverage"
|
68
|
-
version = "7.
|
69
|
-
source = { registry = "https://pypi.org/simple" }
|
70
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
71
|
-
wheels = [
|
72
|
-
{ url = "https://files.pythonhosted.org/packages/
|
73
|
-
{ url = "https://files.pythonhosted.org/packages/
|
74
|
-
{ url = "https://files.pythonhosted.org/packages/
|
75
|
-
{ url = "https://files.pythonhosted.org/packages/
|
76
|
-
{ url = "https://files.pythonhosted.org/packages/
|
77
|
-
{ url = "https://files.pythonhosted.org/packages/
|
78
|
-
{ url = "https://files.pythonhosted.org/packages/
|
79
|
-
{ url = "https://files.pythonhosted.org/packages/
|
80
|
-
{ url = "https://files.pythonhosted.org/packages/
|
81
|
-
{ url = "https://files.pythonhosted.org/packages/
|
82
|
-
{ url = "https://files.pythonhosted.org/packages/
|
83
|
-
{ url = "https://files.pythonhosted.org/packages/
|
84
|
-
{ url = "https://files.pythonhosted.org/packages/
|
85
|
-
{ url = "https://files.pythonhosted.org/packages/
|
86
|
-
{ url = "https://files.pythonhosted.org/packages/
|
87
|
-
{ url = "https://files.pythonhosted.org/packages/
|
88
|
-
{ url = "https://files.pythonhosted.org/packages/
|
89
|
-
{ url = "https://files.pythonhosted.org/packages/
|
90
|
-
{ url = "https://files.pythonhosted.org/packages/
|
91
|
-
{ url = "https://files.pythonhosted.org/packages/
|
92
|
-
{ url = "https://files.pythonhosted.org/packages/
|
93
|
-
{ url = "https://files.pythonhosted.org/packages/
|
94
|
-
{ url = "https://files.pythonhosted.org/packages/
|
95
|
-
{ url = "https://files.pythonhosted.org/packages/
|
96
|
-
{ url = "https://files.pythonhosted.org/packages/
|
97
|
-
{ url = "https://files.pythonhosted.org/packages/
|
98
|
-
{ url = "https://files.pythonhosted.org/packages/
|
99
|
-
{ url = "https://files.pythonhosted.org/packages/
|
100
|
-
{ url = "https://files.pythonhosted.org/packages/
|
101
|
-
{ url = "https://files.pythonhosted.org/packages/
|
102
|
-
{ url = "https://files.pythonhosted.org/packages/
|
103
|
-
{ url = "https://files.pythonhosted.org/packages/
|
104
|
-
{ url = "https://files.pythonhosted.org/packages/
|
105
|
-
{ url = "https://files.pythonhosted.org/packages/
|
106
|
-
{ url = "https://files.pythonhosted.org/packages/
|
107
|
-
{ url = "https://files.pythonhosted.org/packages/
|
108
|
-
{ url = "https://files.pythonhosted.org/packages/
|
109
|
-
{ url = "https://files.pythonhosted.org/packages/
|
110
|
-
{ url = "https://files.pythonhosted.org/packages/
|
111
|
-
{ url = "https://files.pythonhosted.org/packages/
|
112
|
-
{ url = "https://files.pythonhosted.org/packages/
|
113
|
-
{ url = "https://files.pythonhosted.org/packages/
|
114
|
-
{ url = "https://files.pythonhosted.org/packages/
|
115
|
-
{ url = "https://files.pythonhosted.org/packages/
|
116
|
-
{ url = "https://files.pythonhosted.org/packages/
|
117
|
-
{ url = "https://files.pythonhosted.org/packages/
|
118
|
-
{ url = "https://files.pythonhosted.org/packages/
|
119
|
-
{ url = "https://files.pythonhosted.org/packages/
|
120
|
-
{ url = "https://files.pythonhosted.org/packages/
|
121
|
-
{ url = "https://files.pythonhosted.org/packages/
|
122
|
-
{ url = "https://files.pythonhosted.org/packages/
|
123
|
-
{ url = "https://files.pythonhosted.org/packages/
|
124
|
-
{ url = "https://files.pythonhosted.org/packages/
|
125
|
-
{ url = "https://files.pythonhosted.org/packages/
|
126
|
-
{ url = "https://files.pythonhosted.org/packages/
|
127
|
-
{ url = "https://files.pythonhosted.org/packages/
|
128
|
-
{ url = "https://files.pythonhosted.org/packages/
|
129
|
-
{ url = "https://files.pythonhosted.org/packages/
|
130
|
-
{ url = "https://files.pythonhosted.org/packages/
|
131
|
-
{ url = "https://files.pythonhosted.org/packages/
|
132
|
-
{ url = "https://files.pythonhosted.org/packages/
|
133
|
-
{ url = "https://files.pythonhosted.org/packages/
|
134
|
-
{ url = "https://files.pythonhosted.org/packages/
|
135
|
-
{ url = "https://files.pythonhosted.org/packages/
|
136
|
-
{ url = "https://files.pythonhosted.org/packages/
|
137
|
-
{ url = "https://files.pythonhosted.org/packages/
|
68
|
+
version = "7.10.3"
|
69
|
+
source = { registry = "https://pypi.org/simple" }
|
70
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f4/2c/253cc41cd0f40b84c1c34c5363e0407d73d4a1cae005fed6db3b823175bd/coverage-7.10.3.tar.gz", hash = "sha256:812ba9250532e4a823b070b0420a36499859542335af3dca8f47fc6aa1a05619", size = 822936, upload-time = "2025-08-10T21:27:39.968Z" }
|
71
|
+
wheels = [
|
72
|
+
{ url = "https://files.pythonhosted.org/packages/2f/44/e14576c34b37764c821866909788ff7463228907ab82bae188dab2b421f1/coverage-7.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53808194afdf948c462215e9403cca27a81cf150d2f9b386aee4dab614ae2ffe", size = 215964, upload-time = "2025-08-10T21:25:22.828Z" },
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/e6/15/f4f92d9b83100903efe06c9396ee8d8bdba133399d37c186fc5b16d03a87/coverage-7.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f4d1b837d1abf72187a61645dbf799e0d7705aa9232924946e1f57eb09a3bf00", size = 216361, upload-time = "2025-08-10T21:25:25.603Z" },
|
74
|
+
{ url = "https://files.pythonhosted.org/packages/e9/3a/c92e8cd5e89acc41cfc026dfb7acedf89661ce2ea1ee0ee13aacb6b2c20c/coverage-7.10.3-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2a90dd4505d3cc68b847ab10c5ee81822a968b5191664e8a0801778fa60459fa", size = 243115, upload-time = "2025-08-10T21:25:27.09Z" },
|
75
|
+
{ url = "https://files.pythonhosted.org/packages/23/53/c1d8c2778823b1d95ca81701bb8f42c87dc341a2f170acdf716567523490/coverage-7.10.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d52989685ff5bf909c430e6d7f6550937bc6d6f3e6ecb303c97a86100efd4596", size = 244927, upload-time = "2025-08-10T21:25:28.77Z" },
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/79/41/1e115fd809031f432b4ff8e2ca19999fb6196ab95c35ae7ad5e07c001130/coverage-7.10.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdb558a1d97345bde3a9f4d3e8d11c9e5611f748646e9bb61d7d612a796671b5", size = 246784, upload-time = "2025-08-10T21:25:30.195Z" },
|
77
|
+
{ url = "https://files.pythonhosted.org/packages/c7/b2/0eba9bdf8f1b327ae2713c74d4b7aa85451bb70622ab4e7b8c000936677c/coverage-7.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c9e6331a8f09cb1fc8bda032752af03c366870b48cce908875ba2620d20d0ad4", size = 244828, upload-time = "2025-08-10T21:25:31.785Z" },
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/1f/cc/74c56b6bf71f2a53b9aa3df8bc27163994e0861c065b4fe3a8ac290bed35/coverage-7.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:992f48bf35b720e174e7fae916d943599f1a66501a2710d06c5f8104e0756ee1", size = 242844, upload-time = "2025-08-10T21:25:33.37Z" },
|
79
|
+
{ url = "https://files.pythonhosted.org/packages/b6/7b/ac183fbe19ac5596c223cb47af5737f4437e7566100b7e46cc29b66695a5/coverage-7.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c5595fc4ad6a39312c786ec3326d7322d0cf10e3ac6a6df70809910026d67cfb", size = 243721, upload-time = "2025-08-10T21:25:34.939Z" },
|
80
|
+
{ url = "https://files.pythonhosted.org/packages/57/96/cb90da3b5a885af48f531905234a1e7376acfc1334242183d23154a1c285/coverage-7.10.3-cp310-cp310-win32.whl", hash = "sha256:9e92fa1f2bd5a57df9d00cf9ce1eb4ef6fccca4ceabec1c984837de55329db34", size = 218481, upload-time = "2025-08-10T21:25:36.935Z" },
|
81
|
+
{ url = "https://files.pythonhosted.org/packages/15/67/1ba4c7d75745c4819c54a85766e0a88cc2bff79e1760c8a2debc34106dc2/coverage-7.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b96524d6e4a3ce6a75c56bb15dbd08023b0ae2289c254e15b9fbdddf0c577416", size = 219382, upload-time = "2025-08-10T21:25:38.267Z" },
|
82
|
+
{ url = "https://files.pythonhosted.org/packages/87/04/810e506d7a19889c244d35199cbf3239a2f952b55580aa42ca4287409424/coverage-7.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2ff2e2afdf0d51b9b8301e542d9c21a8d084fd23d4c8ea2b3a1b3c96f5f7397", size = 216075, upload-time = "2025-08-10T21:25:39.891Z" },
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/2e/50/6b3fbab034717b4af3060bdaea6b13dfdc6b1fad44b5082e2a95cd378a9a/coverage-7.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:18ecc5d1b9a8c570f6c9b808fa9a2b16836b3dd5414a6d467ae942208b095f85", size = 216476, upload-time = "2025-08-10T21:25:41.137Z" },
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/c7/96/4368c624c1ed92659812b63afc76c492be7867ac8e64b7190b88bb26d43c/coverage-7.10.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1af4461b25fe92889590d438905e1fc79a95680ec2a1ff69a591bb3fdb6c7157", size = 246865, upload-time = "2025-08-10T21:25:42.408Z" },
|
85
|
+
{ url = "https://files.pythonhosted.org/packages/34/12/5608f76070939395c17053bf16e81fd6c06cf362a537ea9d07e281013a27/coverage-7.10.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3966bc9a76b09a40dc6063c8b10375e827ea5dfcaffae402dd65953bef4cba54", size = 248800, upload-time = "2025-08-10T21:25:44.098Z" },
|
86
|
+
{ url = "https://files.pythonhosted.org/packages/ce/52/7cc90c448a0ad724283cbcdfd66b8d23a598861a6a22ac2b7b8696491798/coverage-7.10.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:205a95b87ef4eb303b7bc5118b47b6b6604a644bcbdb33c336a41cfc0a08c06a", size = 250904, upload-time = "2025-08-10T21:25:45.384Z" },
|
87
|
+
{ url = "https://files.pythonhosted.org/packages/e6/70/9967b847063c1c393b4f4d6daab1131558ebb6b51f01e7df7150aa99f11d/coverage-7.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b3801b79fb2ad61e3c7e2554bab754fc5f105626056980a2b9cf3aef4f13f84", size = 248597, upload-time = "2025-08-10T21:25:47.059Z" },
|
88
|
+
{ url = "https://files.pythonhosted.org/packages/2d/fe/263307ce6878b9ed4865af42e784b42bb82d066bcf10f68defa42931c2c7/coverage-7.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0dc69c60224cda33d384572da945759756e3f06b9cdac27f302f53961e63160", size = 246647, upload-time = "2025-08-10T21:25:48.334Z" },
|
89
|
+
{ url = "https://files.pythonhosted.org/packages/8e/27/d27af83ad162eba62c4eb7844a1de6cf7d9f6b185df50b0a3514a6f80ddd/coverage-7.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a83d4f134bab2c7ff758e6bb1541dd72b54ba295ced6a63d93efc2e20cb9b124", size = 247290, upload-time = "2025-08-10T21:25:49.945Z" },
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/28/83/904ff27e15467a5622dbe9ad2ed5831b4a616a62570ec5924d06477dff5a/coverage-7.10.3-cp311-cp311-win32.whl", hash = "sha256:54e409dd64e5302b2a8fdf44ec1c26f47abd1f45a2dcf67bd161873ee05a59b8", size = 218521, upload-time = "2025-08-10T21:25:51.208Z" },
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/b8/29/bc717b8902faaccf0ca486185f0dcab4778561a529dde51cb157acaafa16/coverage-7.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:30c601610a9b23807c5e9e2e442054b795953ab85d525c3de1b1b27cebeb2117", size = 219412, upload-time = "2025-08-10T21:25:52.494Z" },
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/7b/7a/5a1a7028c11bb589268c656c6b3f2bbf06e0aced31bbdf7a4e94e8442cc0/coverage-7.10.3-cp311-cp311-win_arm64.whl", hash = "sha256:dabe662312a97958e932dee056f2659051d822552c0b866823e8ba1c2fe64770", size = 218091, upload-time = "2025-08-10T21:25:54.102Z" },
|
93
|
+
{ url = "https://files.pythonhosted.org/packages/b8/62/13c0b66e966c43d7aa64dadc8cd2afa1f5a2bf9bb863bdabc21fb94e8b63/coverage-7.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:449c1e2d3a84d18bd204258a897a87bc57380072eb2aded6a5b5226046207b42", size = 216262, upload-time = "2025-08-10T21:25:55.367Z" },
|
94
|
+
{ url = "https://files.pythonhosted.org/packages/b5/f0/59fdf79be7ac2f0206fc739032f482cfd3f66b18f5248108ff192741beae/coverage-7.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d4f9ce50b9261ad196dc2b2e9f1fbbee21651b54c3097a25ad783679fd18294", size = 216496, upload-time = "2025-08-10T21:25:56.759Z" },
|
95
|
+
{ url = "https://files.pythonhosted.org/packages/34/b1/bc83788ba31bde6a0c02eb96bbc14b2d1eb083ee073beda18753fa2c4c66/coverage-7.10.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4dd4564207b160d0d45c36a10bc0a3d12563028e8b48cd6459ea322302a156d7", size = 247989, upload-time = "2025-08-10T21:25:58.067Z" },
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/0c/29/f8bdf88357956c844bd872e87cb16748a37234f7f48c721dc7e981145eb7/coverage-7.10.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ca3c9530ee072b7cb6a6ea7b640bcdff0ad3b334ae9687e521e59f79b1d0437", size = 250738, upload-time = "2025-08-10T21:25:59.406Z" },
|
97
|
+
{ url = "https://files.pythonhosted.org/packages/ae/df/6396301d332b71e42bbe624670af9376f63f73a455cc24723656afa95796/coverage-7.10.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6df359e59fa243c9925ae6507e27f29c46698359f45e568fd51b9315dbbe587", size = 251868, upload-time = "2025-08-10T21:26:00.65Z" },
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/91/21/d760b2df6139b6ef62c9cc03afb9bcdf7d6e36ed4d078baacffa618b4c1c/coverage-7.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a181e4c2c896c2ff64c6312db3bda38e9ade2e1aa67f86a5628ae85873786cea", size = 249790, upload-time = "2025-08-10T21:26:02.009Z" },
|
99
|
+
{ url = "https://files.pythonhosted.org/packages/69/91/5dcaa134568202397fa4023d7066d4318dc852b53b428052cd914faa05e1/coverage-7.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a374d4e923814e8b72b205ef6b3d3a647bb50e66f3558582eda074c976923613", size = 247907, upload-time = "2025-08-10T21:26:03.757Z" },
|
100
|
+
{ url = "https://files.pythonhosted.org/packages/38/ed/70c0e871cdfef75f27faceada461206c1cc2510c151e1ef8d60a6fedda39/coverage-7.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daeefff05993e5e8c6e7499a8508e7bd94502b6b9a9159c84fd1fe6bce3151cb", size = 249344, upload-time = "2025-08-10T21:26:05.11Z" },
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/5f/55/c8a273ed503cedc07f8a00dcd843daf28e849f0972e4c6be4c027f418ad6/coverage-7.10.3-cp312-cp312-win32.whl", hash = "sha256:187ecdcac21f9636d570e419773df7bd2fda2e7fa040f812e7f95d0bddf5f79a", size = 218693, upload-time = "2025-08-10T21:26:06.534Z" },
|
102
|
+
{ url = "https://files.pythonhosted.org/packages/94/58/dd3cfb2473b85be0b6eb8c5b6d80b6fc3f8f23611e69ef745cef8cf8bad5/coverage-7.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:4a50ad2524ee7e4c2a95e60d2b0b83283bdfc745fe82359d567e4f15d3823eb5", size = 219501, upload-time = "2025-08-10T21:26:08.195Z" },
|
103
|
+
{ url = "https://files.pythonhosted.org/packages/56/af/7cbcbf23d46de6f24246e3f76b30df099d05636b30c53c158a196f7da3ad/coverage-7.10.3-cp312-cp312-win_arm64.whl", hash = "sha256:c112f04e075d3495fa3ed2200f71317da99608cbb2e9345bdb6de8819fc30571", size = 218135, upload-time = "2025-08-10T21:26:09.584Z" },
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/0a/ff/239e4de9cc149c80e9cc359fab60592365b8c4cbfcad58b8a939d18c6898/coverage-7.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b99e87304ffe0eb97c5308447328a584258951853807afdc58b16143a530518a", size = 216298, upload-time = "2025-08-10T21:26:10.973Z" },
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/56/da/28717da68f8ba68f14b9f558aaa8f3e39ada8b9a1ae4f4977c8f98b286d5/coverage-7.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4af09c7574d09afbc1ea7da9dcea23665c01f3bc1b1feb061dac135f98ffc53a", size = 216546, upload-time = "2025-08-10T21:26:12.616Z" },
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/de/bb/e1ade16b9e3f2d6c323faeb6bee8e6c23f3a72760a5d9af102ef56a656cb/coverage-7.10.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:488e9b50dc5d2aa9521053cfa706209e5acf5289e81edc28291a24f4e4488f46", size = 247538, upload-time = "2025-08-10T21:26:14.455Z" },
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:913ceddb4289cbba3a310704a424e3fb7aac2bc0c3a23ea473193cb290cf17d4", size = 250141, upload-time = "2025-08-10T21:26:15.787Z" },
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/4f/ed/33efd8819895b10c66348bf26f011dd621e804866c996ea6893d682218df/coverage-7.10.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b1f91cbc78c7112ab84ed2a8defbccd90f888fcae40a97ddd6466b0bec6ae8a", size = 251415, upload-time = "2025-08-10T21:26:17.535Z" },
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/26/04/cb83826f313d07dc743359c9914d9bc460e0798da9a0e38b4f4fabc207ed/coverage-7.10.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0bac054d45af7cd938834b43a9878b36ea92781bcb009eab040a5b09e9927e3", size = 249575, upload-time = "2025-08-10T21:26:18.921Z" },
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/2d/fd/ae963c7a8e9581c20fa4355ab8940ca272554d8102e872dbb932a644e410/coverage-7.10.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fe72cbdd12d9e0f4aca873fa6d755e103888a7f9085e4a62d282d9d5b9f7928c", size = 247466, upload-time = "2025-08-10T21:26:20.263Z" },
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/99/e8/b68d1487c6af370b8d5ef223c6d7e250d952c3acfbfcdbf1a773aa0da9d2/coverage-7.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1e2e927ab3eadd7c244023927d646e4c15c65bb2ac7ae3c3e9537c013700d21", size = 249084, upload-time = "2025-08-10T21:26:21.638Z" },
|
112
|
+
{ url = "https://files.pythonhosted.org/packages/66/4d/a0bcb561645c2c1e21758d8200443669d6560d2a2fb03955291110212ec4/coverage-7.10.3-cp313-cp313-win32.whl", hash = "sha256:24d0c13de473b04920ddd6e5da3c08831b1170b8f3b17461d7429b61cad59ae0", size = 218735, upload-time = "2025-08-10T21:26:23.009Z" },
|
113
|
+
{ url = "https://files.pythonhosted.org/packages/6a/c3/78b4adddbc0feb3b223f62761e5f9b4c5a758037aaf76e0a5845e9e35e48/coverage-7.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:3564aae76bce4b96e2345cf53b4c87e938c4985424a9be6a66ee902626edec4c", size = 219531, upload-time = "2025-08-10T21:26:24.474Z" },
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/70/1b/1229c0b2a527fa5390db58d164aa896d513a1fbb85a1b6b6676846f00552/coverage-7.10.3-cp313-cp313-win_arm64.whl", hash = "sha256:f35580f19f297455f44afcd773c9c7a058e52eb6eb170aa31222e635f2e38b87", size = 218162, upload-time = "2025-08-10T21:26:25.847Z" },
|
115
|
+
{ url = "https://files.pythonhosted.org/packages/fc/26/1c1f450e15a3bf3eaecf053ff64538a2612a23f05b21d79ce03be9ff5903/coverage-7.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07009152f497a0464ffdf2634586787aea0e69ddd023eafb23fc38267db94b84", size = 217003, upload-time = "2025-08-10T21:26:27.231Z" },
|
116
|
+
{ url = "https://files.pythonhosted.org/packages/29/96/4b40036181d8c2948454b458750960956a3c4785f26a3c29418bbbee1666/coverage-7.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd2ba5f0c7e7e8cc418be2f0c14c4d9e3f08b8fb8e4c0f83c2fe87d03eb655e", size = 217238, upload-time = "2025-08-10T21:26:28.83Z" },
|
117
|
+
{ url = "https://files.pythonhosted.org/packages/62/23/8dfc52e95da20957293fb94d97397a100e63095ec1e0ef5c09dd8c6f591a/coverage-7.10.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1ae22b97003c74186e034a93e4f946c75fad8c0ce8d92fbbc168b5e15ee2841f", size = 258561, upload-time = "2025-08-10T21:26:30.475Z" },
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/59/95/00e7fcbeda3f632232f4c07dde226afe3511a7781a000aa67798feadc535/coverage-7.10.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eb329f1046888a36b1dc35504d3029e1dd5afe2196d94315d18c45ee380f67d5", size = 260735, upload-time = "2025-08-10T21:26:32.333Z" },
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/9e/4c/f4666cbc4571804ba2a65b078ff0de600b0b577dc245389e0bc9b69ae7ca/coverage-7.10.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce01048199a91f07f96ca3074b0c14021f4fe7ffd29a3e6a188ac60a5c3a4af8", size = 262960, upload-time = "2025-08-10T21:26:33.701Z" },
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/c1/a5/8a9e8a7b12a290ed98b60f73d1d3e5e9ced75a4c94a0d1a671ce3ddfff2a/coverage-7.10.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08b989a06eb9dfacf96d42b7fb4c9a22bafa370d245dc22fa839f2168c6f9fa1", size = 260515, upload-time = "2025-08-10T21:26:35.16Z" },
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/86/11/bb59f7f33b2cac0c5b17db0d9d0abba9c90d9eda51a6e727b43bd5fce4ae/coverage-7.10.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:669fe0d4e69c575c52148511029b722ba8d26e8a3129840c2ce0522e1452b256", size = 258278, upload-time = "2025-08-10T21:26:36.539Z" },
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/cc/22/3646f8903743c07b3e53fded0700fed06c580a980482f04bf9536657ac17/coverage-7.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3262d19092771c83f3413831d9904b1ccc5f98da5de4ffa4ad67f5b20c7aaf7b", size = 259408, upload-time = "2025-08-10T21:26:37.954Z" },
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/d2/5c/6375e9d905da22ddea41cd85c30994b8b6f6c02e44e4c5744b76d16b026f/coverage-7.10.3-cp313-cp313t-win32.whl", hash = "sha256:cc0ee4b2ccd42cab7ee6be46d8a67d230cb33a0a7cd47a58b587a7063b6c6b0e", size = 219396, upload-time = "2025-08-10T21:26:39.426Z" },
|
124
|
+
{ url = "https://files.pythonhosted.org/packages/33/3b/7da37fd14412b8c8b6e73c3e7458fef6b1b05a37f990a9776f88e7740c89/coverage-7.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:03db599f213341e2960430984e04cf35fb179724e052a3ee627a068653cf4a7c", size = 220458, upload-time = "2025-08-10T21:26:40.905Z" },
|
125
|
+
{ url = "https://files.pythonhosted.org/packages/28/cc/59a9a70f17edab513c844ee7a5c63cf1057041a84cc725b46a51c6f8301b/coverage-7.10.3-cp313-cp313t-win_arm64.whl", hash = "sha256:46eae7893ba65f53c71284585a262f083ef71594f05ec5c85baf79c402369098", size = 218722, upload-time = "2025-08-10T21:26:42.362Z" },
|
126
|
+
{ url = "https://files.pythonhosted.org/packages/2d/84/bb773b51a06edbf1231b47dc810a23851f2796e913b335a0fa364773b842/coverage-7.10.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:bce8b8180912914032785850d8f3aacb25ec1810f5f54afc4a8b114e7a9b55de", size = 216280, upload-time = "2025-08-10T21:26:44.132Z" },
|
127
|
+
{ url = "https://files.pythonhosted.org/packages/92/a8/4d8ca9c111d09865f18d56facff64d5fa076a5593c290bd1cfc5dceb8dba/coverage-7.10.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07790b4b37d56608536f7c1079bd1aa511567ac2966d33d5cec9cf520c50a7c8", size = 216557, upload-time = "2025-08-10T21:26:45.598Z" },
|
128
|
+
{ url = "https://files.pythonhosted.org/packages/fe/b2/eb668bfc5060194bc5e1ccd6f664e8e045881cfee66c42a2aa6e6c5b26e8/coverage-7.10.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e79367ef2cd9166acedcbf136a458dfe9a4a2dd4d1ee95738fb2ee581c56f667", size = 247598, upload-time = "2025-08-10T21:26:47.081Z" },
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/fd/b0/9faa4ac62c8822219dd83e5d0e73876398af17d7305968aed8d1606d1830/coverage-7.10.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:419d2a0f769f26cb1d05e9ccbc5eab4cb5d70231604d47150867c07822acbdf4", size = 250131, upload-time = "2025-08-10T21:26:48.65Z" },
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/4e/90/203537e310844d4bf1bdcfab89c1e05c25025c06d8489b9e6f937ad1a9e2/coverage-7.10.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee221cf244757cdc2ac882e3062ab414b8464ad9c884c21e878517ea64b3fa26", size = 251485, upload-time = "2025-08-10T21:26:50.368Z" },
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/b9/b2/9d894b26bc53c70a1fe503d62240ce6564256d6d35600bdb86b80e516e7d/coverage-7.10.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c2079d8cdd6f7373d628e14b3357f24d1db02c9dc22e6a007418ca7a2be0435a", size = 249488, upload-time = "2025-08-10T21:26:52.045Z" },
|
132
|
+
{ url = "https://files.pythonhosted.org/packages/b4/28/af167dbac5281ba6c55c933a0ca6675d68347d5aee39cacc14d44150b922/coverage-7.10.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:bd8df1f83c0703fa3ca781b02d36f9ec67ad9cb725b18d486405924f5e4270bd", size = 247419, upload-time = "2025-08-10T21:26:53.533Z" },
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/f4/1c/9a4ddc9f0dcb150d4cd619e1c4bb39bcf694c6129220bdd1e5895d694dda/coverage-7.10.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6b4e25e0fa335c8aa26e42a52053f3786a61cc7622b4d54ae2dad994aa754fec", size = 248917, upload-time = "2025-08-10T21:26:55.11Z" },
|
134
|
+
{ url = "https://files.pythonhosted.org/packages/92/27/c6a60c7cbe10dbcdcd7fc9ee89d531dc04ea4c073800279bb269954c5a9f/coverage-7.10.3-cp314-cp314-win32.whl", hash = "sha256:d7c3d02c2866deb217dce664c71787f4b25420ea3eaf87056f44fb364a3528f5", size = 218999, upload-time = "2025-08-10T21:26:56.637Z" },
|
135
|
+
{ url = "https://files.pythonhosted.org/packages/36/09/a94c1369964ab31273576615d55e7d14619a1c47a662ed3e2a2fe4dee7d4/coverage-7.10.3-cp314-cp314-win_amd64.whl", hash = "sha256:9c8916d44d9e0fe6cdb2227dc6b0edd8bc6c8ef13438bbbf69af7482d9bb9833", size = 219801, upload-time = "2025-08-10T21:26:58.207Z" },
|
136
|
+
{ url = "https://files.pythonhosted.org/packages/23/59/f5cd2a80f401c01cf0f3add64a7b791b7d53fd6090a4e3e9ea52691cf3c4/coverage-7.10.3-cp314-cp314-win_arm64.whl", hash = "sha256:1007d6a2b3cf197c57105cc1ba390d9ff7f0bee215ced4dea530181e49c65ab4", size = 218381, upload-time = "2025-08-10T21:26:59.707Z" },
|
137
|
+
{ url = "https://files.pythonhosted.org/packages/73/3d/89d65baf1ea39e148ee989de6da601469ba93c1d905b17dfb0b83bd39c96/coverage-7.10.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ebc8791d346410d096818788877d675ca55c91db87d60e8f477bd41c6970ffc6", size = 217019, upload-time = "2025-08-10T21:27:01.242Z" },
|
138
|
+
{ url = "https://files.pythonhosted.org/packages/7d/7d/d9850230cd9c999ce3a1e600f85c2fff61a81c301334d7a1faa1a5ba19c8/coverage-7.10.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f4e4d8e75f6fd3c6940ebeed29e3d9d632e1f18f6fb65d33086d99d4d073241", size = 217237, upload-time = "2025-08-10T21:27:03.442Z" },
|
139
|
+
{ url = "https://files.pythonhosted.org/packages/36/51/b87002d417202ab27f4a1cd6bd34ee3b78f51b3ddbef51639099661da991/coverage-7.10.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:24581ed69f132b6225a31b0228ae4885731cddc966f8a33fe5987288bdbbbd5e", size = 258735, upload-time = "2025-08-10T21:27:05.124Z" },
|
140
|
+
{ url = "https://files.pythonhosted.org/packages/1c/02/1f8612bfcb46fc7ca64a353fff1cd4ed932bb6e0b4e0bb88b699c16794b8/coverage-7.10.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec151569ddfccbf71bac8c422dce15e176167385a00cd86e887f9a80035ce8a5", size = 260901, upload-time = "2025-08-10T21:27:06.68Z" },
|
141
|
+
{ url = "https://files.pythonhosted.org/packages/aa/3a/fe39e624ddcb2373908bd922756384bb70ac1c5009b0d1674eb326a3e428/coverage-7.10.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2ae8e7c56290b908ee817200c0b65929b8050bc28530b131fe7c6dfee3e7d86b", size = 263157, upload-time = "2025-08-10T21:27:08.398Z" },
|
142
|
+
{ url = "https://files.pythonhosted.org/packages/5e/89/496b6d5a10fa0d0691a633bb2b2bcf4f38f0bdfcbde21ad9e32d1af328ed/coverage-7.10.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb742309766d7e48e9eb4dc34bc95a424707bc6140c0e7d9726e794f11b92a0", size = 260597, upload-time = "2025-08-10T21:27:10.237Z" },
|
143
|
+
{ url = "https://files.pythonhosted.org/packages/b6/a6/8b5bf6a9e8c6aaeb47d5fe9687014148efc05c3588110246d5fdeef9b492/coverage-7.10.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c65e2a5b32fbe1e499f1036efa6eb9cb4ea2bf6f7168d0e7a5852f3024f471b1", size = 258353, upload-time = "2025-08-10T21:27:11.773Z" },
|
144
|
+
{ url = "https://files.pythonhosted.org/packages/c3/6d/ad131be74f8afd28150a07565dfbdc86592fd61d97e2dc83383d9af219f0/coverage-7.10.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d48d2cb07d50f12f4f18d2bb75d9d19e3506c26d96fffabf56d22936e5ed8f7c", size = 259504, upload-time = "2025-08-10T21:27:13.254Z" },
|
145
|
+
{ url = "https://files.pythonhosted.org/packages/ec/30/fc9b5097092758cba3375a8cc4ff61774f8cd733bcfb6c9d21a60077a8d8/coverage-7.10.3-cp314-cp314t-win32.whl", hash = "sha256:dec0d9bc15ee305e09fe2cd1911d3f0371262d3cfdae05d79515d8cb712b4869", size = 219782, upload-time = "2025-08-10T21:27:14.736Z" },
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/72/9b/27fbf79451b1fac15c4bda6ec6e9deae27cf7c0648c1305aa21a3454f5c4/coverage-7.10.3-cp314-cp314t-win_amd64.whl", hash = "sha256:424ea93a323aa0f7f01174308ea78bde885c3089ec1bef7143a6d93c3e24ef64", size = 220898, upload-time = "2025-08-10T21:27:16.297Z" },
|
147
|
+
{ url = "https://files.pythonhosted.org/packages/d1/cf/a32bbf92869cbf0b7c8b84325327bfc718ad4b6d2c63374fef3d58e39306/coverage-7.10.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f5983c132a62d93d71c9ef896a0b9bf6e6828d8d2ea32611f58684fba60bba35", size = 218922, upload-time = "2025-08-10T21:27:18.22Z" },
|
148
|
+
{ url = "https://files.pythonhosted.org/packages/f1/66/c06f4a93c65b6fc6578ef4f1fe51f83d61fc6f2a74ec0ce434ed288d834a/coverage-7.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da749daa7e141985487e1ff90a68315b0845930ed53dc397f4ae8f8bab25b551", size = 215951, upload-time = "2025-08-10T21:27:19.815Z" },
|
149
|
+
{ url = "https://files.pythonhosted.org/packages/c2/ea/cc18c70a6f72f8e4def212eaebd8388c64f29608da10b3c38c8ec76f5e49/coverage-7.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3126fb6a47d287f461d9b1aa5d1a8c97034d1dffb4f452f2cf211289dae74ef", size = 216335, upload-time = "2025-08-10T21:27:21.737Z" },
|
150
|
+
{ url = "https://files.pythonhosted.org/packages/f2/fb/9c6d1d67c6d54b149f06b9f374bc9ca03e4d7d7784c8cfd12ceda20e3787/coverage-7.10.3-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3da794db13cc27ca40e1ec8127945b97fab78ba548040047d54e7bfa6d442dca", size = 242772, upload-time = "2025-08-10T21:27:23.884Z" },
|
151
|
+
{ url = "https://files.pythonhosted.org/packages/5a/e5/4223bdb28b992a19a13ab1410c761e2bfe92ca1e7bba8e85ee2024eeda85/coverage-7.10.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4e27bebbd184ef8d1c1e092b74a2b7109dcbe2618dce6e96b1776d53b14b3fe8", size = 244596, upload-time = "2025-08-10T21:27:25.842Z" },
|
152
|
+
{ url = "https://files.pythonhosted.org/packages/d2/13/d646ba28613669d487c654a760571c10128247d12d9f50e93f69542679a2/coverage-7.10.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fd4ee2580b9fefbd301b4f8f85b62ac90d1e848bea54f89a5748cf132782118", size = 246370, upload-time = "2025-08-10T21:27:27.503Z" },
|
153
|
+
{ url = "https://files.pythonhosted.org/packages/02/7c/aff99c67d8c383142b0877ee435caf493765356336211c4899257325d6c7/coverage-7.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6999920bdd73259ce11cabfc1307484f071ecc6abdb2ca58d98facbcefc70f16", size = 244254, upload-time = "2025-08-10T21:27:29.357Z" },
|
154
|
+
{ url = "https://files.pythonhosted.org/packages/b0/13/a51ea145ed51ddfa8717bb29926d9111aca343fab38f04692a843d50be6b/coverage-7.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3623f929db885fab100cb88220a5b193321ed37e03af719efdbaf5d10b6e227", size = 242325, upload-time = "2025-08-10T21:27:30.931Z" },
|
155
|
+
{ url = "https://files.pythonhosted.org/packages/d8/4b/6119be0089c89ad49d2e5a508d55a1485c878642b706a7f95b26e299137d/coverage-7.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:25b902c5e15dea056485d782e420bb84621cc08ee75d5131ecb3dbef8bd1365f", size = 243281, upload-time = "2025-08-10T21:27:32.815Z" },
|
156
|
+
{ url = "https://files.pythonhosted.org/packages/34/c8/1b2e7e53eee4bc1304e56e10361b08197a77a26ceb07201dcc9e759ef132/coverage-7.10.3-cp39-cp39-win32.whl", hash = "sha256:f930a4d92b004b643183451fe9c8fe398ccf866ed37d172ebaccfd443a097f61", size = 218489, upload-time = "2025-08-10T21:27:34.905Z" },
|
157
|
+
{ url = "https://files.pythonhosted.org/packages/dd/1e/9c0c230a199809c39e2dff0f1f889dfb04dcd07d83c1c26a8ef671660e08/coverage-7.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:08e638a93c8acba13c7842953f92a33d52d73e410329acd472280d2a21a6c0e1", size = 219396, upload-time = "2025-08-10T21:27:36.61Z" },
|
158
|
+
{ url = "https://files.pythonhosted.org/packages/84/19/e67f4ae24e232c7f713337f3f4f7c9c58afd0c02866fb07c7b9255a19ed7/coverage-7.10.3-py3-none-any.whl", hash = "sha256:416a8d74dc0adfd33944ba2f405897bab87b7e9e84a391e09d241956bd953ce1", size = 207921, upload-time = "2025-08-10T21:27:38.254Z" },
|
138
159
|
]
|
139
160
|
|
140
161
|
[package.optional-dependencies]
|
@@ -171,7 +192,7 @@ name = "importlib-metadata"
|
|
171
192
|
version = "8.7.0"
|
172
193
|
source = { registry = "https://pypi.org/simple" }
|
173
194
|
dependencies = [
|
174
|
-
{ name = "zipp"
|
195
|
+
{ name = "zipp" },
|
175
196
|
]
|
176
197
|
sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" }
|
177
198
|
wheels = [
|
@@ -215,14 +236,32 @@ wheels = [
|
|
215
236
|
name = "markdown-it-py"
|
216
237
|
version = "3.0.0"
|
217
238
|
source = { registry = "https://pypi.org/simple" }
|
239
|
+
resolution-markers = [
|
240
|
+
"python_full_version < '3.10'",
|
241
|
+
]
|
218
242
|
dependencies = [
|
219
|
-
{ name = "mdurl" },
|
243
|
+
{ name = "mdurl", marker = "python_full_version < '3.10'" },
|
220
244
|
]
|
221
245
|
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
|
222
246
|
wheels = [
|
223
247
|
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
|
224
248
|
]
|
225
249
|
|
250
|
+
[[package]]
|
251
|
+
name = "markdown-it-py"
|
252
|
+
version = "4.0.0"
|
253
|
+
source = { registry = "https://pypi.org/simple" }
|
254
|
+
resolution-markers = [
|
255
|
+
"python_full_version >= '3.10'",
|
256
|
+
]
|
257
|
+
dependencies = [
|
258
|
+
{ name = "mdurl", marker = "python_full_version >= '3.10'" },
|
259
|
+
]
|
260
|
+
sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" }
|
261
|
+
wheels = [
|
262
|
+
{ url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" },
|
263
|
+
]
|
264
|
+
|
226
265
|
[[package]]
|
227
266
|
name = "markupsafe"
|
228
267
|
version = "3.0.2"
|
@@ -370,7 +409,7 @@ wheels = [
|
|
370
409
|
|
371
410
|
[[package]]
|
372
411
|
name = "ovld"
|
373
|
-
version = "0.5.
|
412
|
+
version = "0.5.9"
|
374
413
|
source = { editable = "." }
|
375
414
|
|
376
415
|
[package.dev-dependencies]
|
@@ -522,14 +561,14 @@ wheels = [
|
|
522
561
|
|
523
562
|
[[package]]
|
524
563
|
name = "pytest-datadir"
|
525
|
-
version = "1.
|
564
|
+
version = "1.8.0"
|
526
565
|
source = { registry = "https://pypi.org/simple" }
|
527
566
|
dependencies = [
|
528
567
|
{ name = "pytest" },
|
529
568
|
]
|
530
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
569
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b4/46/db060b291999ca048edd06d6fa9ee95945d088edc38b1172c59eeb46ec45/pytest_datadir-1.8.0.tar.gz", hash = "sha256:7a15faed76cebe87cc91941dd1920a9a38eba56a09c11e9ddf1434d28a0f78eb", size = 11848, upload-time = "2025-07-30T13:52:12.518Z" }
|
531
570
|
wheels = [
|
532
|
-
{ url = "https://files.pythonhosted.org/packages/
|
571
|
+
{ url = "https://files.pythonhosted.org/packages/8f/7a/33895863aec26ac3bb5068a73583f935680d6ab6af2a9567d409430c3ee1/pytest_datadir-1.8.0-py3-none-any.whl", hash = "sha256:5c677bc097d907ac71ca418109adc3abe34cf0bddfe6cf78aecfbabd96a15cf0", size = 6512, upload-time = "2025-07-30T13:52:11.525Z" },
|
533
572
|
]
|
534
573
|
|
535
574
|
[[package]]
|
@@ -625,16 +664,16 @@ wheels = [
|
|
625
664
|
|
626
665
|
[[package]]
|
627
666
|
name = "rich"
|
628
|
-
version = "14.
|
667
|
+
version = "14.1.0"
|
629
668
|
source = { registry = "https://pypi.org/simple" }
|
630
669
|
dependencies = [
|
631
|
-
{ name = "markdown-it-py" },
|
670
|
+
{ name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
|
671
|
+
{ name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
|
632
672
|
{ name = "pygments" },
|
633
|
-
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
|
634
673
|
]
|
635
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
674
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" }
|
636
675
|
wheels = [
|
637
|
-
{ url = "https://files.pythonhosted.org/packages/
|
676
|
+
{ url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" },
|
638
677
|
]
|
639
678
|
|
640
679
|
[[package]]
|
ovld-0.5.9/src/ovld/version.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
version = "0.5.9"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|