external/openembedded-layer: backport opencv upstream patches for CUDA

to fix issues with python interface generation for opencv cuda modules.

Signed-off-by: Matt Madison <matt@madison.systems>
This commit is contained in:
Matt Madison
2023-07-22 09:16:45 -07:00
parent 56e0e9ba94
commit 7cac95de84
8 changed files with 520 additions and 6 deletions

View File

@@ -1,7 +1,7 @@
From 295390cc1fb80eaedb2d9a29a1528be362e86265 Mon Sep 17 00:00:00 2001
From 350eed2e71692cb7961377cedd37141bc85e3e83 Mon Sep 17 00:00:00 2001
From: Matt Madison <matt@madison.systems>
Date: Wed, 19 Aug 2020 04:53:27 -0700
Subject: [PATCH 1/2] Fix search paths in FindCUDNN.cmake
Subject: [PATCH 1/7] Fix search paths in FindCUDNN.cmake
CuDNN libraries are not located in the CUDA toolkit
for Tegra platforms.

View File

@@ -1,7 +1,7 @@
From 19cea321a87f5425a749a161be3fc924643a8cd2 Mon Sep 17 00:00:00 2001
From f6fbf377952a328bebbc4df1edd9aa08999016e9 Mon Sep 17 00:00:00 2001
From: Matt Madison <matt@madison.systems>
Date: Fri, 17 Mar 2023 06:47:40 -0700
Subject: [PATCH 2/2] Fix broken override of CUDA_TOOLKIT_TARGET_DIR setting
Subject: [PATCH 2/7] Fix broken override of CUDA_TOOLKIT_TARGET_DIR setting
Signed-off-by: Matt Madison <matt@madison.systems>
---
@@ -9,7 +9,7 @@ Signed-off-by: Matt Madison <matt@madison.systems>
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake
index a3d987a2b8..71dee57aa7 100644
index 4a562bdaf9..f2c6b7c76d 100644
--- a/cmake/OpenCVDetectCUDA.cmake
+++ b/cmake/OpenCVDetectCUDA.cmake
@@ -11,7 +11,9 @@ endif()
@@ -23,7 +23,7 @@ index a3d987a2b8..71dee57aa7 100644
endif()
if(((NOT CMAKE_VERSION VERSION_LESS "3.9.0") # requires https://gitlab.kitware.com/cmake/cmake/merge_requests/663
@@ -551,8 +553,6 @@ if(HAVE_CUDA)
@@ -559,8 +561,6 @@ if(HAVE_CUDA)
foreach(p ${CUDA_LIBS_PATH})
if(MSVC AND CMAKE_GENERATOR MATCHES "Ninja|JOM")
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}"${p}")

View File

@@ -0,0 +1,59 @@
From a0aec233409846a3f62cf2df36aa91080eed37c6 Mon Sep 17 00:00:00 2001
From: Avasam <samuel.06@hotmail.com>
Date: Tue, 4 Jul 2023 17:50:33 -0400
Subject: [PATCH 3/7] Add missing properties to error class
---
.../src2/typing_stubs_generation/api_refinement.py | 13 +++++++++++--
.../src2/typing_stubs_generation/nodes/__init__.py | 2 +-
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/modules/python/src2/typing_stubs_generation/api_refinement.py b/modules/python/src2/typing_stubs_generation/api_refinement.py
index f23167f914..599830f8d8 100644
--- a/modules/python/src2/typing_stubs_generation/api_refinement.py
+++ b/modules/python/src2/typing_stubs_generation/api_refinement.py
@@ -3,7 +3,8 @@ __all__ = [
]
from typing import Sequence, Callable
-from .nodes import NamespaceNode, FunctionNode, OptionalTypeNode
+
+from .nodes import NamespaceNode, FunctionNode, OptionalTypeNode, ClassProperty, PrimitiveTypeNode
from .ast_utils import find_function_node, SymbolName
@@ -11,7 +12,7 @@ def apply_manual_api_refinement(root: NamespaceNode) -> None:
# Export OpenCV exception class
builtin_exception = root.add_class("Exception")
builtin_exception.is_exported = False
- root.add_class("error", (builtin_exception, ))
+ root.add_class("error", (builtin_exception, ), ERROR_CLASS_PROPERTIES)
for symbol_name, refine_symbol in NODES_TO_REFINE.items():
refine_symbol(root, symbol_name)
@@ -46,3 +47,11 @@ NODES_TO_REFINE = {
SymbolName(("cv", ), (), "resize"): make_optional_arg("dsize"),
SymbolName(("cv", ), (), "calcHist"): make_optional_arg("mask"),
}
+ERROR_CLASS_PROPERTIES = (
+ ClassProperty("code", PrimitiveTypeNode.int_(), False),
+ ClassProperty("err", PrimitiveTypeNode.str_(), False),
+ ClassProperty("file", PrimitiveTypeNode.str_(), False),
+ ClassProperty("func", PrimitiveTypeNode.str_(), False),
+ ClassProperty("line", PrimitiveTypeNode.int_(), False),
+ ClassProperty("msg", PrimitiveTypeNode.str_(), False),
+)
diff --git a/modules/python/src2/typing_stubs_generation/nodes/__init__.py b/modules/python/src2/typing_stubs_generation/nodes/__init__.py
index 0ee1df93d9..82f8df8c92 100644
--- a/modules/python/src2/typing_stubs_generation/nodes/__init__.py
+++ b/modules/python/src2/typing_stubs_generation/nodes/__init__.py
@@ -7,5 +7,5 @@ from .constant_node import ConstantNode
from .type_node import (
TypeNode, OptionalTypeNode, UnionTypeNode, NoneTypeNode, TupleTypeNode,
ASTNodeTypeNode, AliasTypeNode, SequenceTypeNode, AnyTypeNode,
- AggregatedTypeNode, NDArrayTypeNode, AliasRefTypeNode,
+ AggregatedTypeNode, NDArrayTypeNode, AliasRefTypeNode, PrimitiveTypeNode
)
--
2.34.1

View File

@@ -0,0 +1,25 @@
From fb315a8cea4a6b33e25358bccf2ce64ed2c0ebd2 Mon Sep 17 00:00:00 2001
From: Vadim Levin <vadim.levin@xperience.ai>
Date: Mon, 10 Jul 2023 14:30:44 +0300
Subject: [PATCH 4/7] fix: typing stubs overload presence check
---
modules/python/src2/typing_stubs_generation/generation.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/python/src2/typing_stubs_generation/generation.py b/modules/python/src2/typing_stubs_generation/generation.py
index f89200e0ed..ea6b64bde0 100644
--- a/modules/python/src2/typing_stubs_generation/generation.py
+++ b/modules/python/src2/typing_stubs_generation/generation.py
@@ -535,7 +535,7 @@ def check_overload_presence(node: Union[NamespaceNode, ClassNode]) -> bool:
otherwise.
"""
for func_node in node.functions.values():
- if len(func_node.overloads):
+ if len(func_node.overloads) > 1:
return True
return False
--
2.34.1

View File

@@ -0,0 +1,36 @@
From bbca78d2f6e5bde35386d9edd9966a7312bb409b Mon Sep 17 00:00:00 2001
From: Vadim Levin <vadim.levin@xperience.ai>
Date: Mon, 10 Jul 2023 14:38:15 +0300
Subject: [PATCH 5/7] fix: recursively re-export nested submodules
---
.../python/src2/typing_stubs_generation/generation.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/modules/python/src2/typing_stubs_generation/generation.py b/modules/python/src2/typing_stubs_generation/generation.py
index ea6b64bde0..f41563e276 100644
--- a/modules/python/src2/typing_stubs_generation/generation.py
+++ b/modules/python/src2/typing_stubs_generation/generation.py
@@ -621,12 +621,17 @@ def _populate_reexported_symbols(root: NamespaceNode) -> None:
# Re-export all submodules to allow referencing symbols in submodules
# without submodule import. Example:
# `cv2.aruco.ArucoDetector` should be accessible without `import cv2.aruco`
- for submodule in root.namespaces.values():
- root.reexported_submodules.append(submodule.export_name)
+ def _reexport_submodule(ns: NamespaceNode) -> None:
+ for submodule in ns.namespaces.values():
+ ns.reexported_submodules.append(submodule.export_name)
+ _reexport_submodule(submodule)
+
+ _reexport_submodule(root)
# Special cases, symbols defined in possible pure Python submodules should be
root.reexported_submodules_symbols["mat_wrapper"].append("Mat")
+
def _write_reexported_symbols_section(module: NamespaceNode, output_stream: StringIO) -> None:
"""Write re-export section for the given module.
--
2.34.1

View File

@@ -0,0 +1,85 @@
From bbc25633c60f1fd32bff694c906eff1420676179 Mon Sep 17 00:00:00 2001
From: Vadim Levin <vadim.levin@xperience.ai>
Date: Mon, 10 Jul 2023 13:55:54 +0300
Subject: [PATCH 6/7] feat: add matrix type stubs generation
Adds missing typing stubs:
- Matrix depths: `CV_8U`, `CV_8S` and etc.
- Matrix type constants: `CV_8UC1`, `CV_32FC3` and etc.
- Matrix type factory functions: `CV_*(channels) -> int` and `CV_MAKETYPE`
---
.../typing_stubs_generation/api_refinement.py | 31 ++++++++++++++++++-
.../typing_stubs_generation/generation.py | 3 --
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/modules/python/src2/typing_stubs_generation/api_refinement.py b/modules/python/src2/typing_stubs_generation/api_refinement.py
index 599830f8d8..f7d3a9dd08 100644
--- a/modules/python/src2/typing_stubs_generation/api_refinement.py
+++ b/modules/python/src2/typing_stubs_generation/api_refinement.py
@@ -4,11 +4,13 @@ __all__ = [
from typing import Sequence, Callable
-from .nodes import NamespaceNode, FunctionNode, OptionalTypeNode, ClassProperty, PrimitiveTypeNode
+from .nodes import (NamespaceNode, FunctionNode, OptionalTypeNode,
+ ClassProperty, PrimitiveTypeNode)
from .ast_utils import find_function_node, SymbolName
def apply_manual_api_refinement(root: NamespaceNode) -> None:
+ export_matrix_type_constants(root)
# Export OpenCV exception class
builtin_exception = root.add_class("Exception")
builtin_exception.is_exported = False
@@ -17,6 +19,33 @@ def apply_manual_api_refinement(root: NamespaceNode) -> None:
refine_symbol(root, symbol_name)
+def export_matrix_type_constants(root: NamespaceNode) -> None:
+ MAX_PREDEFINED_CHANNELS = 4
+
+ depth_names = ("CV_8U", "CV_8S", "CV_16U", "CV_16S", "CV_32S",
+ "CV_32F", "CV_64F", "CV_16F")
+ for depth_value, depth_name in enumerate(depth_names):
+ # Export depth constants
+ root.add_constant(depth_name, str(depth_value))
+ # Export predefined types
+ for c in range(MAX_PREDEFINED_CHANNELS):
+ root.add_constant(f"{depth_name}C{c + 1}",
+ f"{depth_value + 8 * c}")
+ # Export type creation function
+ root.add_function(
+ f"{depth_name}C",
+ (FunctionNode.Arg("channels", PrimitiveTypeNode.int_()), ),
+ FunctionNode.RetType(PrimitiveTypeNode.int_())
+ )
+ # Export CV_MAKETYPE
+ root.add_function(
+ "CV_MAKETYPE",
+ (FunctionNode.Arg("depth", PrimitiveTypeNode.int_()),
+ FunctionNode.Arg("channels", PrimitiveTypeNode.int_())),
+ FunctionNode.RetType(PrimitiveTypeNode.int_())
+ )
+
+
def make_optional_arg(arg_name: str) -> Callable[[NamespaceNode, SymbolName], None]:
def _make_optional_arg(root_node: NamespaceNode,
function_symbol_name: SymbolName) -> None:
diff --git a/modules/python/src2/typing_stubs_generation/generation.py b/modules/python/src2/typing_stubs_generation/generation.py
index f41563e276..2d6d4d338e 100644
--- a/modules/python/src2/typing_stubs_generation/generation.py
+++ b/modules/python/src2/typing_stubs_generation/generation.py
@@ -103,9 +103,6 @@ def _generate_typing_stubs(root: NamespaceNode, output_path: Path) -> None:
_write_reexported_symbols_section(root, output_stream)
- # Write constants section, because constants don't impose any dependencies
- _generate_section_stub(StubSection("# Constants", ConstantNode), root,
- output_stream, 0)
# NOTE: Enumerations require special handling, because all enumeration
# constants are exposed as module attributes
has_enums = _generate_section_stub(StubSection("# Enumerations", EnumerationNode),
--
2.34.1

View File

@@ -0,0 +1,304 @@
From 23fb6c7e134a51a8e7fb3491e3d973e59bad0ac3 Mon Sep 17 00:00:00 2001
From: Vadim Levin <vadim.levin@xperience.ai>
Date: Wed, 19 Jul 2023 16:51:41 +0300
Subject: [PATCH 7/7] Merge pull request #24022 from
VadimLevin:dev/vlevin/python-typing-cuda
Fix python typing stubs generation for CUDA modules #24022
resolves #23946
resolves #23945
resolves opencv/opencv-python#871
### Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
---
.../typing_stubs_generation/api_refinement.py | 68 +++++++++++++++++--
.../src2/typing_stubs_generation/ast_utils.py | 29 +++++++-
.../typing_stubs_generation/generation.py | 53 +++++----------
.../predefined_types.py | 4 ++
4 files changed, 112 insertions(+), 42 deletions(-)
diff --git a/modules/python/src2/typing_stubs_generation/api_refinement.py b/modules/python/src2/typing_stubs_generation/api_refinement.py
index f7d3a9dd08..a879d0ac4b 100644
--- a/modules/python/src2/typing_stubs_generation/api_refinement.py
+++ b/modules/python/src2/typing_stubs_generation/api_refinement.py
@@ -2,14 +2,17 @@ __all__ = [
"apply_manual_api_refinement"
]
-from typing import Sequence, Callable
+from typing import cast, Sequence, Callable, Iterable
-from .nodes import (NamespaceNode, FunctionNode, OptionalTypeNode,
- ClassProperty, PrimitiveTypeNode)
-from .ast_utils import find_function_node, SymbolName
+from .nodes import (NamespaceNode, FunctionNode, OptionalTypeNode, TypeNode,
+ ClassProperty, PrimitiveTypeNode, ASTNodeTypeNode,
+ AggregatedTypeNode)
+from .ast_utils import (find_function_node, SymbolName,
+ for_each_function_overload)
def apply_manual_api_refinement(root: NamespaceNode) -> None:
+ refine_cuda_module(root)
export_matrix_type_constants(root)
# Export OpenCV exception class
builtin_exception = root.add_class("Exception")
@@ -57,13 +60,65 @@ def make_optional_arg(arg_name: str) -> Callable[[NamespaceNode, SymbolName], No
continue
overload.arguments[arg_idx].type_node = OptionalTypeNode(
- overload.arguments[arg_idx].type_node
+ cast(TypeNode, overload.arguments[arg_idx].type_node)
)
return _make_optional_arg
-def _find_argument_index(arguments: Sequence[FunctionNode.Arg], name: str) -> int:
+def refine_cuda_module(root: NamespaceNode) -> None:
+ def fix_cudaoptflow_enums_names() -> None:
+ for class_name in ("NvidiaOpticalFlow_1_0", "NvidiaOpticalFlow_2_0"):
+ if class_name not in cuda_root.classes:
+ continue
+ opt_flow_class = cuda_root.classes[class_name]
+ _trim_class_name_from_argument_types(
+ for_each_function_overload(opt_flow_class), class_name
+ )
+
+ def fix_namespace_usage_scope(cuda_ns: NamespaceNode) -> None:
+ USED_TYPES = ("GpuMat", "Stream")
+
+ def fix_type_usage(type_node: TypeNode) -> None:
+ if isinstance(type_node, AggregatedTypeNode):
+ for item in type_node.items:
+ fix_type_usage(item)
+ if isinstance(type_node, ASTNodeTypeNode):
+ if type_node._typename in USED_TYPES:
+ type_node._typename = f"cuda_{type_node._typename}"
+
+ for overload in for_each_function_overload(cuda_ns):
+ if overload.return_type is not None:
+ fix_type_usage(overload.return_type.type_node)
+ for type_node in [arg.type_node for arg in overload.arguments
+ if arg.type_node is not None]:
+ fix_type_usage(type_node)
+
+ if "cuda" not in root.namespaces:
+ return
+ cuda_root = root.namespaces["cuda"]
+ fix_cudaoptflow_enums_names()
+ for ns in [ns for ns_name, ns in root.namespaces.items()
+ if ns_name.startswith("cuda")]:
+ fix_namespace_usage_scope(ns)
+
+
+def _trim_class_name_from_argument_types(
+ overloads: Iterable[FunctionNode.Overload],
+ class_name: str
+) -> None:
+ separator = f"{class_name}_"
+ for overload in overloads:
+ for arg in [arg for arg in overload.arguments
+ if arg.type_node is not None]:
+ ast_node = cast(ASTNodeTypeNode, arg.type_node)
+ if class_name in ast_node.ctype_name:
+ fixed_name = ast_node._typename.split(separator)[-1]
+ ast_node._typename = fixed_name
+
+
+def _find_argument_index(arguments: Sequence[FunctionNode.Arg],
+ name: str) -> int:
for i, arg in enumerate(arguments):
if arg.name == name:
return i
@@ -76,6 +131,7 @@ NODES_TO_REFINE = {
SymbolName(("cv", ), (), "resize"): make_optional_arg("dsize"),
SymbolName(("cv", ), (), "calcHist"): make_optional_arg("mask"),
}
+
ERROR_CLASS_PROPERTIES = (
ClassProperty("code", PrimitiveTypeNode.int_(), False),
ClassProperty("err", PrimitiveTypeNode.str_(), False),
diff --git a/modules/python/src2/typing_stubs_generation/ast_utils.py b/modules/python/src2/typing_stubs_generation/ast_utils.py
index 4cdf807260..47c06571a5 100644
--- a/modules/python/src2/typing_stubs_generation/ast_utils.py
+++ b/modules/python/src2/typing_stubs_generation/ast_utils.py
@@ -1,5 +1,5 @@
from typing import (NamedTuple, Sequence, Tuple, Union, List,
- Dict, Callable, Optional)
+ Dict, Callable, Optional, Generator)
import keyword
from .nodes import (ASTNode, NamespaceNode, ClassNode, FunctionNode,
@@ -404,6 +404,33 @@ def get_enum_module_and_export_name(enum_node: EnumerationNode) -> Tuple[str, st
return enum_export_name, namespace_node.full_export_name
+def for_each_class(
+ node: Union[NamespaceNode, ClassNode]
+) -> Generator[ClassNode, None, None]:
+ for cls in node.classes.values():
+ yield cls
+ if len(cls.classes):
+ yield from for_each_class(cls)
+
+
+def for_each_function(
+ node: Union[NamespaceNode, ClassNode],
+ traverse_class_nodes: bool = True
+) -> Generator[FunctionNode, None, None]:
+ yield from node.functions.values()
+ if traverse_class_nodes:
+ for cls in for_each_class(node):
+ yield from for_each_function(cls)
+
+
+def for_each_function_overload(
+ node: Union[NamespaceNode, ClassNode],
+ traverse_class_nodes: bool = True
+) -> Generator[FunctionNode.Overload, None, None]:
+ for func in for_each_function(node, traverse_class_nodes):
+ yield from func.overloads
+
+
if __name__ == '__main__':
import doctest
doctest.testmod()
diff --git a/modules/python/src2/typing_stubs_generation/generation.py b/modules/python/src2/typing_stubs_generation/generation.py
index 2d6d4d338e..b4e8cb22c6 100644
--- a/modules/python/src2/typing_stubs_generation/generation.py
+++ b/modules/python/src2/typing_stubs_generation/generation.py
@@ -3,17 +3,20 @@ __all__ = ("generate_typing_stubs", )
from io import StringIO
from pathlib import Path
import re
-from typing import (Generator, Type, Callable, NamedTuple, Union, Set, Dict,
+from typing import (Type, Callable, NamedTuple, Union, Set, Dict,
Collection, Tuple, List)
import warnings
-from .ast_utils import get_enclosing_namespace, get_enum_module_and_export_name
+from .ast_utils import (get_enclosing_namespace,
+ get_enum_module_and_export_name,
+ for_each_function_overload,
+ for_each_class)
from .predefined_types import PREDEFINED_TYPES
from .api_refinement import apply_manual_api_refinement
-from .nodes import (ASTNode, ASTNodeType, NamespaceNode, ClassNode, FunctionNode,
- EnumerationNode, ConstantNode)
+from .nodes import (ASTNode, ASTNodeType, NamespaceNode, ClassNode,
+ FunctionNode, EnumerationNode, ConstantNode)
from .nodes.type_node import (TypeNode, AliasTypeNode, AliasRefTypeNode,
AggregatedTypeNode, ASTNodeTypeNode,
@@ -105,8 +108,9 @@ def _generate_typing_stubs(root: NamespaceNode, output_path: Path) -> None:
# NOTE: Enumerations require special handling, because all enumeration
# constants are exposed as module attributes
- has_enums = _generate_section_stub(StubSection("# Enumerations", EnumerationNode),
- root, output_stream, 0)
+ has_enums = _generate_section_stub(
+ StubSection("# Enumerations", EnumerationNode), root, output_stream, 0
+ )
# Collect all enums from class level and export them to module level
for class_node in root.classes.values():
if _generate_enums_from_classes_tree(class_node, output_stream, indent=0):
@@ -536,30 +540,6 @@ def check_overload_presence(node: Union[NamespaceNode, ClassNode]) -> bool:
return True
return False
-
-def _for_each_class(node: Union[NamespaceNode, ClassNode]) \
- -> Generator[ClassNode, None, None]:
- for cls in node.classes.values():
- yield cls
- if len(cls.classes):
- yield from _for_each_class(cls)
-
-
-def _for_each_function(node: Union[NamespaceNode, ClassNode]) \
- -> Generator[FunctionNode, None, None]:
- for func in node.functions.values():
- yield func
- for cls in node.classes.values():
- yield from _for_each_function(cls)
-
-
-def _for_each_function_overload(node: Union[NamespaceNode, ClassNode]) \
- -> Generator[FunctionNode.Overload, None, None]:
- for func in _for_each_function(node):
- for overload in func.overloads:
- yield overload
-
-
def _collect_required_imports(root: NamespaceNode) -> Set[str]:
"""Collects all imports required for classes and functions typing stubs
declarations.
@@ -582,7 +562,7 @@ def _collect_required_imports(root: NamespaceNode) -> Set[str]:
has_overload = check_overload_presence(root)
# if there is no module-level functions with overload, check its presence
# during class traversing, including their inner-classes
- for cls in _for_each_class(root):
+ for cls in for_each_class(root):
if not has_overload and check_overload_presence(cls):
has_overload = True
required_imports.add("import typing")
@@ -600,8 +580,9 @@ def _collect_required_imports(root: NamespaceNode) -> Set[str]:
if has_overload:
required_imports.add("import typing")
# Importing modules required to resolve functions arguments
- for overload in _for_each_function_overload(root):
- for arg in filter(lambda a: a.type_node is not None, overload.arguments):
+ for overload in for_each_function_overload(root):
+ for arg in filter(lambda a: a.type_node is not None,
+ overload.arguments):
_add_required_usage_imports(arg.type_node, required_imports) # type: ignore
if overload.return_type is not None:
_add_required_usage_imports(overload.return_type.type_node,
@@ -625,11 +606,13 @@ def _populate_reexported_symbols(root: NamespaceNode) -> None:
_reexport_submodule(root)
- # Special cases, symbols defined in possible pure Python submodules should be
+ # Special cases, symbols defined in possible pure Python submodules
+ # should be
root.reexported_submodules_symbols["mat_wrapper"].append("Mat")
-def _write_reexported_symbols_section(module: NamespaceNode, output_stream: StringIO) -> None:
+def _write_reexported_symbols_section(module: NamespaceNode,
+ output_stream: StringIO) -> None:
"""Write re-export section for the given module.
Re-export statements have from `from module_name import smth as smth`.
diff --git a/modules/python/src2/typing_stubs_generation/predefined_types.py b/modules/python/src2/typing_stubs_generation/predefined_types.py
index fe9a37a45e..ce4f901e79 100644
--- a/modules/python/src2/typing_stubs_generation/predefined_types.py
+++ b/modules/python/src2/typing_stubs_generation/predefined_types.py
@@ -22,6 +22,10 @@ _PREDEFINED_TYPES = (
PrimitiveTypeNode.int_("uchar"),
PrimitiveTypeNode.int_("unsigned"),
PrimitiveTypeNode.int_("int64"),
+ PrimitiveTypeNode.int_("uint8_t"),
+ PrimitiveTypeNode.int_("int8_t"),
+ PrimitiveTypeNode.int_("int32_t"),
+ PrimitiveTypeNode.int_("uint32_t"),
PrimitiveTypeNode.int_("size_t"),
PrimitiveTypeNode.float_("float"),
PrimitiveTypeNode.float_("double"),
--
2.34.1

View File

@@ -17,6 +17,11 @@ EXTRA_OECMAKE:append:cuda = ' -DOPENCV_CUDA_DETECTION_NVCC_FLAGS="-ccbin ${CUDAH
SRC_URI:append:cuda = " \
file://0001-Fix-search-paths-in-FindCUDNN.cmake.patch \
file://0002-Fix-broken-override-of-CUDA_TOOLKIT_TARGET_DIR-setti.patch \
file://0003-Add-missing-properties-to-error-class.patch \
file://0004-fix-typing-stubs-overload-presence-check.patch \
file://0005-fix-recursively-re-export-nested-submodules.patch \
file://0006-feat-add-matrix-type-stubs-generation.patch \
file://0007-Merge-pull-request-24022-from-VadimLevin-dev-vlevin-.patch \
"
OPTICALFLOW_MD5 = "a73cd48b18dcc0cc8933b30796074191"