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 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 order.SAME:
77
- order = order.LESS
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
@@ -199,6 +199,7 @@ _standard_instancechecks = {
199
199
  type(list[object]).__instancecheck__,
200
200
  ABCMeta.__instancecheck__,
201
201
  type(typing.Protocol).__instancecheck__,
202
+ type(typing.Any).__instancecheck__,
202
203
  }
203
204
 
204
205
 
ovld/version.py CHANGED
@@ -1 +1 @@
1
- version = "0.5.7"
1
+ version = "0.5.8"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ovld
3
- Version: 0.5.7
3
+ Version: 0.5.8
4
4
  Summary: Overloading Python functions
5
5
  Project-URL: Homepage, https://ovld.readthedocs.io/en/latest/
6
6
  Project-URL: Documentation, https://ovld.readthedocs.io/en/latest/
@@ -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=0fseIntzJRCPYXq-tmnxgy5ipNa4ZxR0D_6So0xstdQ,12729
7
- ovld/mro.py,sha256=Aw1r5Zz7V9cVBDwWzQ-WNnbpBwoGztgbw3wLAyS6Y60,4863
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=cyy9pcuMhmo1_UdPonH9JT6B9QlI4oH6_JK89cM3_gk,5046
14
- ovld/version.py,sha256=06EkKCZh0our2EHc5Ssv0FmkpTsQ75viNNVyU74k-Zg,18
15
- ovld-0.5.7.dist-info/METADATA,sha256=8kgc5SptJGDMMR4twLX9cB88rnMMC-GvuUn2Z8mCmgE,10458
16
- ovld-0.5.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- ovld-0.5.7.dist-info/licenses/LICENSE,sha256=cSwNTIzd1cbI89xt3PeZZYJP2y3j8Zus4bXgo4svpX8,1066
18
- ovld-0.5.7.dist-info/RECORD,,
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