ovld 0.5.7__py3-none-any.whl → 0.5.9__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 +50 -5
- ovld/utils.py +1 -0
- ovld/version.py +1 -1
- {ovld-0.5.7.dist-info → ovld-0.5.9.dist-info}/METADATA +1 -1
- {ovld-0.5.7.dist-info → ovld-0.5.9.dist-info}/RECORD +8 -8
- {ovld-0.5.7.dist-info → ovld-0.5.9.dist-info}/WHEEL +0 -0
- {ovld-0.5.7.dist-info → ovld-0.5.9.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
|
@@ -106,9 +134,18 @@ def typeorder(t1, t2):
|
|
106
134
|
return Order.NONE
|
107
135
|
|
108
136
|
|
137
|
+
def _find_ann(main, others):
|
138
|
+
if main in others:
|
139
|
+
return True
|
140
|
+
elif isinstance(main, type):
|
141
|
+
return any(isinstance(x, main) for x in others)
|
142
|
+
else:
|
143
|
+
return False
|
144
|
+
|
145
|
+
|
109
146
|
def subclasscheck(t1, t2):
|
110
147
|
"""Check whether t1 is a "subclass" of t2."""
|
111
|
-
if t1 == t2:
|
148
|
+
if t1 == t2 or t2 is Any:
|
112
149
|
return True
|
113
150
|
|
114
151
|
if (
|
@@ -134,12 +171,20 @@ def subclasscheck(t1, t2):
|
|
134
171
|
o1 = get_origin(t1)
|
135
172
|
o2 = get_origin(t2)
|
136
173
|
|
174
|
+
if o1 is Annotated and o2 is Annotated:
|
175
|
+
t1, *a1 = get_args(t1)
|
176
|
+
t2, *a2 = get_args(t2)
|
177
|
+
return subclasscheck(t1, t2) and any(_find_ann(main, a1) for main in a2)
|
178
|
+
|
179
|
+
if o1 is Annotated:
|
180
|
+
return t2 is Annotated
|
181
|
+
|
137
182
|
if not isinstance(o1, type):
|
138
183
|
o1 = None
|
139
184
|
if not isinstance(o2, type):
|
140
185
|
o2 = None
|
141
186
|
|
142
|
-
if o1 or o2:
|
187
|
+
if (o1 or o2) and o2 not in UnionTypes:
|
143
188
|
o1 = o1 or t1
|
144
189
|
o2 = o2 or t2
|
145
190
|
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.9"
|
@@ -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=-M-BFtmSSEZ39eMPpZ4c2xTAwE43zuJu_jtlxAEfuPo,6238
|
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=fa8mYJ1rRpnvSWOBQjwJEtqO9AqOw8j-QGkxIJqUaM0,18
|
15
|
+
ovld-0.5.9.dist-info/METADATA,sha256=7TIVCS1fVm0Oq7GcG5KR9JRNWQa6JkM-c6euVUu3e6g,10458
|
16
|
+
ovld-0.5.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
17
|
+
ovld-0.5.9.dist-info/licenses/LICENSE,sha256=cSwNTIzd1cbI89xt3PeZZYJP2y3j8Zus4bXgo4svpX8,1066
|
18
|
+
ovld-0.5.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|