ovld 0.5.7__py3-none-any.whl → 0.5.8__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.
- ovld/medley.py +2 -1
- ovld/mro.py +41 -5
- ovld/utils.py +1 -0
- ovld/version.py +1 -1
- {ovld-0.5.7.dist-info → ovld-0.5.8.dist-info}/METADATA +1 -1
- {ovld-0.5.7.dist-info → ovld-0.5.8.dist-info}/RECORD +8 -8
- {ovld-0.5.7.dist-info → ovld-0.5.8.dist-info}/WHEEL +0 -0
- {ovld-0.5.7.dist-info → ovld-0.5.8.dist-info}/licenses/LICENSE +0 -0
ovld/medley.py
CHANGED
@@ -164,7 +164,7 @@ class medley_cls_dict(dict):
|
|
164
164
|
super().__setitem__(attr, value)
|
165
165
|
|
166
166
|
def __setitem__(self, attr, value):
|
167
|
-
if attr == "__annotations__":
|
167
|
+
if attr == "__annotations__" or attr == "__annotate_func__":
|
168
168
|
self.set_direct(attr, value)
|
169
169
|
return
|
170
170
|
|
@@ -365,6 +365,7 @@ def meld_classes(classes):
|
|
365
365
|
merged = medley_cls_dict(medleys)
|
366
366
|
merged.set_direct("_ovld_codegen_fields", tuple(cg_fields))
|
367
367
|
merged.set_direct("_ovld_medleys", tuple(medleys))
|
368
|
+
merged.set_direct("__annotations__", {name: t for name, t, f in dc_fields})
|
368
369
|
|
369
370
|
if "__qualname__" in merged._combiners:
|
370
371
|
del merged._combiners["__qualname__"]
|
ovld/mro.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from dataclasses import dataclass
|
2
2
|
from enum import Enum
|
3
3
|
from graphlib import TopologicalSorter
|
4
|
-
from typing import get_args, get_origin
|
4
|
+
from typing import Annotated, Any, get_args, get_origin
|
5
5
|
|
6
6
|
from .utils import UnionTypes, is_dependent
|
7
7
|
|
@@ -52,6 +52,10 @@ def typeorder(t1, t2):
|
|
52
52
|
"""
|
53
53
|
if t1 == t2:
|
54
54
|
return Order.SAME
|
55
|
+
if t1 is Any:
|
56
|
+
return Order.MORE
|
57
|
+
if t2 is Any:
|
58
|
+
return Order.LESS
|
55
59
|
|
56
60
|
if (
|
57
61
|
hasattr(t1, "__type_order__")
|
@@ -67,14 +71,35 @@ def typeorder(t1, t2):
|
|
67
71
|
o1 = get_origin(t1)
|
68
72
|
o2 = get_origin(t2)
|
69
73
|
|
74
|
+
if o1 is Annotated and o2 is Annotated:
|
75
|
+
t1, *a1 = get_args(t1)
|
76
|
+
t2, *a2 = get_args(t2)
|
77
|
+
p1 = max([getattr(ann, "annotation_priority", 0) for ann in a1], default=0)
|
78
|
+
p2 = max([getattr(ann, "annotation_priority", 0) for ann in a2], default=0)
|
79
|
+
if p1 < p2:
|
80
|
+
return Order.MORE
|
81
|
+
elif p2 < p1:
|
82
|
+
return Order.LESS
|
83
|
+
else:
|
84
|
+
return typeorder(t1, t2)
|
85
|
+
|
86
|
+
if o1 is Annotated:
|
87
|
+
if t2 is Annotated:
|
88
|
+
return Order.LESS
|
89
|
+
return typeorder(get_args(t1)[0], t2)
|
90
|
+
if o2 is Annotated:
|
91
|
+
if t1 is Annotated:
|
92
|
+
return Order.MORE
|
93
|
+
return typeorder(t1, get_args(t2)[0])
|
94
|
+
|
70
95
|
if o2 and not o1:
|
71
96
|
return typeorder(t2, t1).opposite()
|
72
97
|
|
73
98
|
if o1:
|
74
99
|
if not o2:
|
75
100
|
order = typeorder(o1, t2)
|
76
|
-
if order is
|
77
|
-
order =
|
101
|
+
if order is Order.SAME:
|
102
|
+
order = Order.LESS
|
78
103
|
return order
|
79
104
|
|
80
105
|
if (order := typeorder(o1, o2)) is not Order.SAME:
|
@@ -93,6 +118,9 @@ def typeorder(t1, t2):
|
|
93
118
|
ords = [typeorder(a1, a2) for a1, a2 in zip(args1, args2)]
|
94
119
|
return Order.merge(ords)
|
95
120
|
|
121
|
+
if not isinstance(t1, type) or not isinstance(t2, type): # pragma: no cover
|
122
|
+
return Order.SAME
|
123
|
+
|
96
124
|
sx = issubclass(t1, t2)
|
97
125
|
sy = issubclass(t2, t1)
|
98
126
|
if sx and sy: # pragma: no cover
|
@@ -108,7 +136,7 @@ def typeorder(t1, t2):
|
|
108
136
|
|
109
137
|
def subclasscheck(t1, t2):
|
110
138
|
"""Check whether t1 is a "subclass" of t2."""
|
111
|
-
if t1 == t2:
|
139
|
+
if t1 == t2 or t2 is Any:
|
112
140
|
return True
|
113
141
|
|
114
142
|
if (
|
@@ -134,12 +162,20 @@ def subclasscheck(t1, t2):
|
|
134
162
|
o1 = get_origin(t1)
|
135
163
|
o2 = get_origin(t2)
|
136
164
|
|
165
|
+
if o1 is Annotated and o2 is Annotated:
|
166
|
+
t1, *a1 = get_args(t1)
|
167
|
+
t2, *a2 = get_args(t2)
|
168
|
+
return subclasscheck(t1, t2) and any(ann in a2 for ann in a1)
|
169
|
+
|
170
|
+
if o1 is Annotated:
|
171
|
+
return t2 is Annotated
|
172
|
+
|
137
173
|
if not isinstance(o1, type):
|
138
174
|
o1 = None
|
139
175
|
if not isinstance(o2, type):
|
140
176
|
o2 = None
|
141
177
|
|
142
|
-
if o1 or o2:
|
178
|
+
if (o1 or o2) and o2 not in UnionTypes:
|
143
179
|
o1 = o1 or t1
|
144
180
|
o2 = o2 or t2
|
145
181
|
if isinstance(o1, type) and isinstance(o2, type) and issubclass(o1, o2):
|
ovld/utils.py
CHANGED
ovld/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = "0.5.
|
1
|
+
version = "0.5.8"
|
@@ -3,16 +3,16 @@ ovld/abc.py,sha256=4qpZyYwI8dWgY1Oiv5FhdKg2uzNcyWxIpGmGJVcjXrs,1177
|
|
3
3
|
ovld/codegen.py,sha256=27tmamlanuTPDT-x31ISyqP0wGKW9BCFZJGVyq9qLg8,9728
|
4
4
|
ovld/core.py,sha256=WqZ1lvcAGSri02XZeY73Bj5AKB9RYBCAvHLbyns8u68,17792
|
5
5
|
ovld/dependent.py,sha256=JIgsc_5ddPH51_2IrZ6JW6bWE5RyrrrOwR2e9UvDhZ4,8922
|
6
|
-
ovld/medley.py,sha256=
|
7
|
-
ovld/mro.py,sha256=
|
6
|
+
ovld/medley.py,sha256=Pq6j4qPl8osyQ4Xp-ktnt2uJXytC9Jo70toS5LYHRf8,12840
|
7
|
+
ovld/mro.py,sha256=5h0JoMGUYNoj4RmVi2uElZB9PGWj_IEvLvBWYtAtYRw,6033
|
8
8
|
ovld/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
ovld/recode.py,sha256=vXg9XLExp_9LdAHO0JWR4wvwHhpOLu2Xcrg9ZYg1nms,16407
|
10
10
|
ovld/signatures.py,sha256=Q8JucSOun0ESGx14aWtHtBzLEiM6FxY5HP3imyqXoDo,8984
|
11
11
|
ovld/typemap.py,sha256=wkLuCc6xa2VZJOMaAhuYYgnNrywhovkQwbkBnoRfCsY,13985
|
12
12
|
ovld/types.py,sha256=CRL6Vuzg5moXgAAhIj2698GvZoyF4HWbUDYz2hKt6us,13373
|
13
|
-
ovld/utils.py,sha256=
|
14
|
-
ovld/version.py,sha256=
|
15
|
-
ovld-0.5.
|
16
|
-
ovld-0.5.
|
17
|
-
ovld-0.5.
|
18
|
-
ovld-0.5.
|
13
|
+
ovld/utils.py,sha256=8nvycMWpTmwGq7ojjDA7yi2NdkU78NBdUlvRk_vDECY,5086
|
14
|
+
ovld/version.py,sha256=IAa3xnF9S8cqANXapf16xG7B-aQG7AHxJ3Iio8QzYuc,18
|
15
|
+
ovld-0.5.8.dist-info/METADATA,sha256=b1vd6kxUQ18CJ7t6b3H8zAmyTZaCpFowtZNq_sxJhSE,10458
|
16
|
+
ovld-0.5.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
17
|
+
ovld-0.5.8.dist-info/licenses/LICENSE,sha256=cSwNTIzd1cbI89xt3PeZZYJP2y3j8Zus4bXgo4svpX8,1066
|
18
|
+
ovld-0.5.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|