ovld 0.5.1__tar.gz → 0.5.3__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.
Files changed (68) hide show
  1. {ovld-0.5.1 → ovld-0.5.3}/PKG-INFO +1 -1
  2. {ovld-0.5.1 → ovld-0.5.3}/pyproject.toml +2 -2
  3. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/codegen.py +1 -0
  4. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/core.py +4 -1
  5. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/medley.py +3 -1
  6. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/mro.py +1 -1
  7. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/recode.py +12 -1
  8. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/utils.py +2 -2
  9. ovld-0.5.3/src/ovld/version.py +1 -0
  10. ovld-0.5.1/src/ovld/version.py +0 -1
  11. {ovld-0.5.1 → ovld-0.5.3}/.github/workflows/publish.yml +0 -0
  12. {ovld-0.5.1 → ovld-0.5.3}/.github/workflows/python-package.yml +0 -0
  13. {ovld-0.5.1 → ovld-0.5.3}/.gitignore +0 -0
  14. {ovld-0.5.1 → ovld-0.5.3}/.python-version +0 -0
  15. {ovld-0.5.1 → ovld-0.5.3}/.readthedocs.yaml +0 -0
  16. {ovld-0.5.1 → ovld-0.5.3}/LICENSE +0 -0
  17. {ovld-0.5.1 → ovld-0.5.3}/README.md +0 -0
  18. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/__init__.py +0 -0
  19. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/common.py +0 -0
  20. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_add.py +0 -0
  21. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_ast.py +0 -0
  22. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_calc.py +0 -0
  23. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_fib.py +0 -0
  24. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_multer.py +0 -0
  25. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_regexp.py +0 -0
  26. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_trivial.py +0 -0
  27. {ovld-0.5.1 → ovld-0.5.3}/benchmarks/test_tweaknum.py +0 -0
  28. {ovld-0.5.1 → ovld-0.5.3}/docs/codegen.md +0 -0
  29. {ovld-0.5.1 → ovld-0.5.3}/docs/compare.md +0 -0
  30. {ovld-0.5.1 → ovld-0.5.3}/docs/dependent.md +0 -0
  31. {ovld-0.5.1 → ovld-0.5.3}/docs/features.md +0 -0
  32. {ovld-0.5.1 → ovld-0.5.3}/docs/index.md +0 -0
  33. {ovld-0.5.1 → ovld-0.5.3}/docs/medley.md +0 -0
  34. {ovld-0.5.1 → ovld-0.5.3}/docs/types.md +0 -0
  35. {ovld-0.5.1 → ovld-0.5.3}/docs/usage.md +0 -0
  36. {ovld-0.5.1 → ovld-0.5.3}/mkdocs.yml +0 -0
  37. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/__init__.py +0 -0
  38. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/abc.py +0 -0
  39. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/dependent.py +0 -0
  40. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/py.typed +0 -0
  41. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/signatures.py +0 -0
  42. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/typemap.py +0 -0
  43. {ovld-0.5.1 → ovld-0.5.3}/src/ovld/types.py +0 -0
  44. {ovld-0.5.1 → ovld-0.5.3}/tests/__init__.py +0 -0
  45. {ovld-0.5.1 → ovld-0.5.3}/tests/modules/gingerbread.py +0 -0
  46. {ovld-0.5.1 → ovld-0.5.3}/tests/test_abc.py +0 -0
  47. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_dataclass_gen.txt +0 -0
  48. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_method.txt +0 -0
  49. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_method_metaclass.txt +0 -0
  50. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_method_per_instance.txt +0 -0
  51. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_simple.txt +0 -0
  52. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen/test_variant_generation.txt +0 -0
  53. {ovld-0.5.1 → ovld-0.5.3}/tests/test_codegen.py +0 -0
  54. {ovld-0.5.1 → ovld-0.5.3}/tests/test_dependent.py +0 -0
  55. {ovld-0.5.1 → ovld-0.5.3}/tests/test_examples.py +0 -0
  56. {ovld-0.5.1 → ovld-0.5.3}/tests/test_global.py +0 -0
  57. {ovld-0.5.1 → ovld-0.5.3}/tests/test_medley.py +0 -0
  58. {ovld-0.5.1 → ovld-0.5.3}/tests/test_mro.py +0 -0
  59. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld/test_display.txt +0 -0
  60. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld/test_display_more.txt +0 -0
  61. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld/test_doc.txt +0 -0
  62. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld/test_doc2.txt +0 -0
  63. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld/test_method_doc.txt +0 -0
  64. {ovld-0.5.1 → ovld-0.5.3}/tests/test_ovld.py +0 -0
  65. {ovld-0.5.1 → ovld-0.5.3}/tests/test_typemap.py +0 -0
  66. {ovld-0.5.1 → ovld-0.5.3}/tests/test_types.py +0 -0
  67. {ovld-0.5.1 → ovld-0.5.3}/tests/test_utils.py +0 -0
  68. {ovld-0.5.1 → ovld-0.5.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ovld
3
- Version: 0.5.1
3
+ Version: 0.5.3
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/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ovld"
3
- version = "0.5.1"
3
+ version = "0.5.3"
4
4
  description = "Overloading Python functions"
5
5
  authors = [
6
6
  { name = "Olivier Breuleux", email = "breuleux@gmail.com" }
@@ -32,7 +32,7 @@ benchmark = [
32
32
  "multimethod>=1.12",
33
33
  "multipledispatch>=1.0.0",
34
34
  "plum-dispatch>=2.5.2",
35
- "runtype>=0.5.1",
35
+ "runtype>=0.5.3",
36
36
  ]
37
37
 
38
38
  [tool.hatch.build.targets.wheel]
@@ -295,6 +295,7 @@ def codegen_specializer(typemap, fn, tup):
295
295
  adjusted_name = f"{fn.__name__.split('[')[0]}[{sigstring(tup)}]"
296
296
  func = rename_function(func, adjusted_name)
297
297
  func.__codegen__ = cg
298
+ func.__orig_name__ = fn.__name__
298
299
  return func
299
300
 
300
301
 
@@ -169,7 +169,10 @@ class Ovld:
169
169
  else:
170
170
  hlp = ""
171
171
  for c in possibilities:
172
- hlp += f"* {c.handler.__name__} (priority: {c.priority}, specificity: {list(c.specificity)})\n"
172
+ hn = getattr(c.handler, "__orig_name__", c.handler.__name__)
173
+ hlp += (
174
+ f"* {hn} (priority: {c.priority}, specificity: {list(c.specificity)})\n"
175
+ )
173
176
  return ResolutionError(
174
177
  f"Ambiguous resolution in {self} for"
175
178
  f" argument types [{typenames}]\n"
@@ -178,7 +178,9 @@ class medley_cls_dict(dict):
178
178
 
179
179
  combiner = self._combiners.get(attr, None)
180
180
  if combiner is None:
181
- if inspect.isfunction(value) or isinstance(value, Ovld):
181
+ if to_ovld(value, force=False):
182
+ combiner = BuildOvld(attr)
183
+ elif inspect.isfunction(value):
182
184
  combiner = self._default_combiner(attr)
183
185
  else:
184
186
  combiner = KeepLast(attr)
@@ -137,7 +137,7 @@ def subclasscheck(t1, t2):
137
137
  if o1 or o2:
138
138
  o1 = o1 or t1
139
139
  o2 = o2 or t2
140
- if issubclass(o1, o2):
140
+ if isinstance(o1, type) and isinstance(o2, type) and issubclass(o1, o2):
141
141
  if o2 is t2: # pragma: no cover
142
142
  return True
143
143
  else:
@@ -496,7 +496,18 @@ def recode(fn, ovld, syms, newname):
496
496
  if fn.__closure__:
497
497
  new = closure_wrap(new.body[0], "irrelevant", fn.__code__.co_freevars)
498
498
  ast.fix_missing_locations(new)
499
- ast.increment_lineno(new, fn.__code__.co_firstlineno - 1)
499
+ line_delta = fn.__code__.co_firstlineno - 1
500
+ col_delta = len(firstline := src.split("\n", 1)[0]) - len(firstline.lstrip())
501
+ for node in ast.walk(new):
502
+ if hasattr(node, "lineno"):
503
+ node.lineno += line_delta
504
+ if hasattr(node, "end_lineno"):
505
+ node.end_lineno += line_delta
506
+ if hasattr(node, "col_offset"):
507
+ node.col_offset += col_delta
508
+ if hasattr(node, "end_col_offset"):
509
+ node.end_col_offset += col_delta
510
+
500
511
  res = compile(new, mode="exec", filename=fn.__code__.co_filename)
501
512
  if fn.__closure__:
502
513
  res = [x for x in res.co_consts if isinstance(x, CodeType)][0]
@@ -106,7 +106,7 @@ def clsstring(cls):
106
106
  return f"{origin.__name__}[{args}]"
107
107
  else:
108
108
  r = repr(cls)
109
- if r.startswith("<class "):
109
+ if r.startswith("<class ") or r.startswith("<enum "):
110
110
  return cls.__name__
111
111
  else:
112
112
  return r
@@ -160,7 +160,7 @@ class NameDatabase:
160
160
  return name
161
161
 
162
162
  def get(self, value, suggested_name=None):
163
- if isinstance(value, (int, float, str)):
163
+ if type(value) in (int, float, str):
164
164
  return repr(value)
165
165
  if id(value) in self.names:
166
166
  return self.names[id(value)]
@@ -0,0 +1 @@
1
+ version = "0.5.3"
@@ -1 +0,0 @@
1
- version = "0.5.1"
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