Skip to content

Commit f6108c2

Browse files
authored
Use right imports for Annotated (#168)
1 parent 192aad9 commit f6108c2

File tree

10 files changed

+103
-83
lines changed

10 files changed

+103
-83
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ jobs:
8888
if-no-files-found: ignore
8989

9090
- name: Check error generation
91-
if: ${{ !contains(fromJson('["3.7", "3.8"]'), matrix.python) }}
9291
shell: bash
9392
run: ./tests/check-demo-errors-generation.sh
9493

pybind11_stubgen/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
FixPybind11EnumStrDoc,
4040
FixRedundantBuiltinsAnnotation,
4141
FixRedundantMethodsFromBuiltinObject,
42-
FixTypingExtTypeNames,
4342
FixTypingTypeNames,
4443
FixValueReprRandomAddress,
4544
OverridePrintSafeValues,
@@ -228,7 +227,6 @@ class Parser(
228227
FilterTypingModuleAttributes,
229228
FixPEP585CollectionNames,
230229
FixTypingTypeNames,
231-
FixTypingExtTypeNames,
232230
FixMissingFixedSizeImport,
233231
FixMissingEnumMembersAnnotation,
234232
OverridePrintSafeValues,

pybind11_stubgen/parser/mixins/fix.py

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import importlib
55
import inspect
66
import re
7+
import sys
78
import types
89
from logging import getLogger
910
from typing import Any
@@ -323,26 +324,43 @@ class FixTypingTypeNames(IParser):
323324
Identifier,
324325
[
325326
"Annotated",
327+
"Any",
328+
"Buffer",
326329
"Callable",
327330
"Dict",
328-
"Iterator",
329331
"ItemsView",
330332
"Iterable",
333+
"Iterator",
331334
"KeysView",
332335
"List",
333336
"Optional",
334-
"Set",
335337
"Sequence",
338+
"Set",
336339
"Tuple",
337340
"Union",
338341
"ValuesView",
339342
# Old pybind11 annotations were not capitalized
340-
"iterator",
343+
"buffer",
341344
"iterable",
345+
"iterator",
342346
"sequence",
343347
],
344348
)
345349
)
350+
__typing_extensions_names: set[Identifier] = set(
351+
map(
352+
Identifier,
353+
[
354+
"Buffer",
355+
],
356+
)
357+
)
358+
359+
def __init__(self):
360+
super().__init__()
361+
py_version = sys.version_info[:2]
362+
if py_version < (3, 9):
363+
self.__typing_extensions_names.add(Identifier("Annotated"))
346364

347365
def parse_annotation_str(
348366
self, annotation_str: str
@@ -353,7 +371,12 @@ def parse_annotation_str(
353371

354372
word = result.name[0]
355373
if word in self.__typing_names:
356-
result.name = QualifiedName.from_str(f"typing.{word[0].upper()}{word[1:]}")
374+
package = "typing"
375+
if word in self.__typing_extensions_names:
376+
package = "typing_extensions"
377+
result.name = QualifiedName.from_str(
378+
f"{package}.{word[0].upper()}{word[1:]}"
379+
)
357380
if word == "function" and result.parameters is None:
358381
result.name = QualifiedName.from_str("typing.Callable")
359382
if word in ("object", "handle") and result.parameters is None:
@@ -362,30 +385,6 @@ def parse_annotation_str(
362385
return result
363386

364387

365-
class FixTypingExtTypeNames(IParser):
366-
__typing_names: set[Identifier] = set(
367-
map(
368-
Identifier,
369-
["buffer", "Buffer"],
370-
)
371-
)
372-
373-
def parse_annotation_str(
374-
self, annotation_str: str
375-
) -> ResolvedType | InvalidExpression | Value:
376-
result = super().parse_annotation_str(annotation_str)
377-
if not isinstance(result, ResolvedType):
378-
return result
379-
assert len(result.name) > 0
380-
381-
word = result.name[0]
382-
if word in self.__typing_names and result.parameters is None:
383-
result.name = QualifiedName.from_str(
384-
f"typing_extensions.{word[0].upper()}{word[1:]}"
385-
)
386-
return result
387-
388-
389388
class FixCurrentModulePrefixInTypeNames(IParser):
390389
def __init__(self):
391390
super().__init__()
@@ -469,7 +468,10 @@ class FixNumpyArrayDimAnnotation(IParser):
469468
for arr in ["array", "matrix"]
470469
),
471470
}
472-
__annotated_name = QualifiedName.from_str("typing.Annotated")
471+
# NB: Not using full name due to ambiguity `typing.Annotated` vs
472+
# `typing_extension.Annotated` in different python versions
473+
# Rely on later fix by `FixTypingTypeNames`
474+
__annotated_name = QualifiedName.from_str("Annotated")
473475
numpy_primitive_types: set[QualifiedName] = set(
474476
map(
475477
lambda name: QualifiedName.from_str(f"numpy.{name}"),

tests/check-demo-stubs-generation.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ run_stubgen() {
3939
--output-dir=${STUBS_DIR} \
4040
--numpy-array-wrap-with-annotated \
4141
--ignore-invalid-expressions="\(anonymous namespace\)::(Enum|Unbound)|<demo\._bindings\.flawed_bindings\..*" \
42-
--ignore-unresolved-names="typing\.Annotated" \
4342
--enum-class-locations="ConsoleForegroundColor:demo._bindings.enum" \
4443
--print-safe-value-reprs="Foo\(\d+\)" \
4544
--exit-code

tests/stubs/python-3.7/pybind11-master/demo/_bindings/eigen.pyi

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ from __future__ import annotations
33
import numpy
44
import pybind11_stubgen.typing_ext
55
import scipy.sparse
6+
import typing_extensions
67

78
__all__ = [
89
"accept_matrix_int",
@@ -21,39 +22,39 @@ __all__ = [
2122
]
2223

2324
def accept_matrix_int(
24-
arg0: typing.Annotated[
25+
arg0: typing_extensions.Annotated[
2526
numpy.ndarray, numpy.int32, pybind11_stubgen.typing_ext.FixedSize(3, 3)
2627
]
2728
) -> None: ...
2829
def accept_vector_float64(
29-
arg0: typing.Annotated[
30+
arg0: typing_extensions.Annotated[
3031
numpy.ndarray, numpy.float64, pybind11_stubgen.typing_ext.FixedSize(3, 1)
3132
]
3233
) -> None: ...
3334
def dense_matrix_c(
34-
arg0: typing.Annotated[
35+
arg0: typing_extensions.Annotated[
3536
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
3637
]
37-
) -> typing.Annotated[
38+
) -> typing_extensions.Annotated[
3839
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
3940
]: ...
4041
def dense_matrix_r(
41-
arg0: typing.Annotated[
42+
arg0: typing_extensions.Annotated[
4243
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
4344
]
44-
) -> typing.Annotated[
45+
) -> typing_extensions.Annotated[
4546
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
4647
]: ...
4748
def fixed_mutator_a(
48-
arg0: typing.Annotated[
49+
arg0: typing_extensions.Annotated[
4950
numpy.ndarray,
5051
numpy.float32,
5152
pybind11_stubgen.typing_ext.FixedSize(5, 6),
5253
numpy.ndarray.flags.writeable,
5354
]
5455
) -> None: ...
5556
def fixed_mutator_c(
56-
arg0: typing.Annotated[
57+
arg0: typing_extensions.Annotated[
5758
numpy.ndarray,
5859
numpy.float32,
5960
pybind11_stubgen.typing_ext.FixedSize(5, 6),
@@ -62,7 +63,7 @@ def fixed_mutator_c(
6263
]
6364
) -> None: ...
6465
def fixed_mutator_r(
65-
arg0: typing.Annotated[
66+
arg0: typing_extensions.Annotated[
6667
numpy.ndarray,
6768
numpy.float32,
6869
pybind11_stubgen.typing_ext.FixedSize(5, 6),
@@ -71,28 +72,28 @@ def fixed_mutator_r(
7172
]
7273
) -> None: ...
7374
def four_col_matrix_r(
74-
arg0: typing.Annotated[
75+
arg0: typing_extensions.Annotated[
7576
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", 4)
7677
]
77-
) -> typing.Annotated[
78+
) -> typing_extensions.Annotated[
7879
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", 4)
7980
]: ...
8081
def four_row_matrix_r(
81-
arg0: typing.Annotated[
82+
arg0: typing_extensions.Annotated[
8283
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize(4, "n")
8384
]
84-
) -> typing.Annotated[
85+
) -> typing_extensions.Annotated[
8586
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize(4, "n")
8687
]: ...
87-
def get_matrix_int() -> typing.Annotated[
88+
def get_matrix_int() -> typing_extensions.Annotated[
8889
numpy.ndarray, numpy.int32, pybind11_stubgen.typing_ext.FixedSize(3, 3)
8990
]: ...
90-
def get_vector_float64() -> typing.Annotated[
91+
def get_vector_float64() -> typing_extensions.Annotated[
9192
numpy.ndarray, numpy.float64, pybind11_stubgen.typing_ext.FixedSize(3, 1)
9293
]: ...
9394
def sparse_matrix_c(
94-
arg0: typing.Annotated[scipy.sparse.csc_matrix, numpy.float32]
95-
) -> typing.Annotated[scipy.sparse.csc_matrix, numpy.float32]: ...
95+
arg0: typing_extensions.Annotated[scipy.sparse.csc_matrix, numpy.float32]
96+
) -> typing_extensions.Annotated[scipy.sparse.csc_matrix, numpy.float32]: ...
9697
def sparse_matrix_r(
97-
arg0: typing.Annotated[scipy.sparse.csr_matrix, numpy.float32]
98-
) -> typing.Annotated[scipy.sparse.csr_matrix, numpy.float32]: ...
98+
arg0: typing_extensions.Annotated[scipy.sparse.csr_matrix, numpy.float32]
99+
) -> typing_extensions.Annotated[scipy.sparse.csr_matrix, numpy.float32]: ...
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import numpy
4+
import typing_extensions
45

56
__all__ = [
67
"accept_ndarray_float64",
@@ -10,8 +11,12 @@ __all__ = [
1011
]
1112

1213
def accept_ndarray_float64(
13-
arg0: typing.Annotated[numpy.ndarray, numpy.float64]
14+
arg0: typing_extensions.Annotated[numpy.ndarray, numpy.float64]
1415
) -> None: ...
15-
def accept_ndarray_int(arg0: typing.Annotated[numpy.ndarray, numpy.int32]) -> None: ...
16-
def get_ndarray_float64() -> typing.Annotated[numpy.ndarray, numpy.float64]: ...
17-
def get_ndarray_int() -> typing.Annotated[numpy.ndarray, numpy.int32]: ...
16+
def accept_ndarray_int(
17+
arg0: typing_extensions.Annotated[numpy.ndarray, numpy.int32]
18+
) -> None: ...
19+
def get_ndarray_float64() -> typing_extensions.Annotated[
20+
numpy.ndarray, numpy.float64
21+
]: ...
22+
def get_ndarray_int() -> typing_extensions.Annotated[numpy.ndarray, numpy.int32]: ...

tests/stubs/python-3.7/pybind11-master/demo/_bindings/stl.pyi

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ from __future__ import annotations
33
import typing
44

55
import pybind11_stubgen.typing_ext
6+
import typing_extensions
67

78
__all__ = ["std_array", "std_map", "std_optional", "std_variant", "std_vector"]
89

910
def std_array(
10-
arg0: typing.Annotated[list[int], pybind11_stubgen.typing_ext.FixedSize(3)]
11-
) -> typing.Annotated[list[int], pybind11_stubgen.typing_ext.FixedSize(3)]: ...
11+
arg0: typing_extensions.Annotated[
12+
list[int], pybind11_stubgen.typing_ext.FixedSize(3)
13+
]
14+
) -> typing_extensions.Annotated[
15+
list[int], pybind11_stubgen.typing_ext.FixedSize(3)
16+
]: ...
1217
def std_map() -> dict[int, complex]: ...
1318
def std_optional(arg0: int | None) -> None: ...
1419
def std_variant(arg0: int | float | tuple[int, int]) -> None: ...

tests/stubs/python-3.8/pybind11-master/demo/_bindings/eigen.pyi

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ from __future__ import annotations
33
import numpy
44
import pybind11_stubgen.typing_ext
55
import scipy.sparse
6+
import typing_extensions
67

78
__all__ = [
89
"accept_matrix_int",
@@ -21,39 +22,39 @@ __all__ = [
2122
]
2223

2324
def accept_matrix_int(
24-
arg0: typing.Annotated[
25+
arg0: typing_extensions.Annotated[
2526
numpy.ndarray, numpy.int32, pybind11_stubgen.typing_ext.FixedSize(3, 3)
2627
]
2728
) -> None: ...
2829
def accept_vector_float64(
29-
arg0: typing.Annotated[
30+
arg0: typing_extensions.Annotated[
3031
numpy.ndarray, numpy.float64, pybind11_stubgen.typing_ext.FixedSize(3, 1)
3132
]
3233
) -> None: ...
3334
def dense_matrix_c(
34-
arg0: typing.Annotated[
35+
arg0: typing_extensions.Annotated[
3536
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
3637
]
37-
) -> typing.Annotated[
38+
) -> typing_extensions.Annotated[
3839
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
3940
]: ...
4041
def dense_matrix_r(
41-
arg0: typing.Annotated[
42+
arg0: typing_extensions.Annotated[
4243
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
4344
]
44-
) -> typing.Annotated[
45+
) -> typing_extensions.Annotated[
4546
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", "n")
4647
]: ...
4748
def fixed_mutator_a(
48-
arg0: typing.Annotated[
49+
arg0: typing_extensions.Annotated[
4950
numpy.ndarray,
5051
numpy.float32,
5152
pybind11_stubgen.typing_ext.FixedSize(5, 6),
5253
numpy.ndarray.flags.writeable,
5354
]
5455
) -> None: ...
5556
def fixed_mutator_c(
56-
arg0: typing.Annotated[
57+
arg0: typing_extensions.Annotated[
5758
numpy.ndarray,
5859
numpy.float32,
5960
pybind11_stubgen.typing_ext.FixedSize(5, 6),
@@ -62,7 +63,7 @@ def fixed_mutator_c(
6263
]
6364
) -> None: ...
6465
def fixed_mutator_r(
65-
arg0: typing.Annotated[
66+
arg0: typing_extensions.Annotated[
6667
numpy.ndarray,
6768
numpy.float32,
6869
pybind11_stubgen.typing_ext.FixedSize(5, 6),
@@ -71,28 +72,28 @@ def fixed_mutator_r(
7172
]
7273
) -> None: ...
7374
def four_col_matrix_r(
74-
arg0: typing.Annotated[
75+
arg0: typing_extensions.Annotated[
7576
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", 4)
7677
]
77-
) -> typing.Annotated[
78+
) -> typing_extensions.Annotated[
7879
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize("m", 4)
7980
]: ...
8081
def four_row_matrix_r(
81-
arg0: typing.Annotated[
82+
arg0: typing_extensions.Annotated[
8283
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize(4, "n")
8384
]
84-
) -> typing.Annotated[
85+
) -> typing_extensions.Annotated[
8586
numpy.ndarray, numpy.float32, pybind11_stubgen.typing_ext.DynamicSize(4, "n")
8687
]: ...
87-
def get_matrix_int() -> typing.Annotated[
88+
def get_matrix_int() -> typing_extensions.Annotated[
8889
numpy.ndarray, numpy.int32, pybind11_stubgen.typing_ext.FixedSize(3, 3)
8990
]: ...
90-
def get_vector_float64() -> typing.Annotated[
91+
def get_vector_float64() -> typing_extensions.Annotated[
9192
numpy.ndarray, numpy.float64, pybind11_stubgen.typing_ext.FixedSize(3, 1)
9293
]: ...
9394
def sparse_matrix_c(
94-
arg0: typing.Annotated[scipy.sparse.csc_matrix, numpy.float32]
95-
) -> typing.Annotated[scipy.sparse.csc_matrix, numpy.float32]: ...
95+
arg0: typing_extensions.Annotated[scipy.sparse.csc_matrix, numpy.float32]
96+
) -> typing_extensions.Annotated[scipy.sparse.csc_matrix, numpy.float32]: ...
9697
def sparse_matrix_r(
97-
arg0: typing.Annotated[scipy.sparse.csr_matrix, numpy.float32]
98-
) -> typing.Annotated[scipy.sparse.csr_matrix, numpy.float32]: ...
98+
arg0: typing_extensions.Annotated[scipy.sparse.csr_matrix, numpy.float32]
99+
) -> typing_extensions.Annotated[scipy.sparse.csr_matrix, numpy.float32]: ...

0 commit comments

Comments
 (0)