From 8c7c75f8c76778d8832341f1567ef6cca4af6d5b Mon Sep 17 00:00:00 2001 From: Kolin Guo Date: Mon, 15 Jan 2024 14:19:08 -0800 Subject: [PATCH] Add custom dev/stubgen.py based on pybind11-stubgen * Removes from __future__ import annotations --- dev/generate_stub_and_doc.sh | 2 +- dev/stubgen.py | 120 ++++++++++++++++++++++++++++++++++ docs/mplib.html | 7 +- mplib/__init__.pyi | 3 +- mplib/planner.pyi | 3 +- mplib/pymp/__init__.pyi | 1 - mplib/pymp/articulation.pyi | 1 - mplib/pymp/fcl.pyi | 1 - mplib/pymp/kdl.pyi | 1 - mplib/pymp/ompl.pyi | 1 - mplib/pymp/pinocchio.pyi | 1 - mplib/pymp/planning_world.pyi | 1 - 12 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 dev/stubgen.py diff --git a/dev/generate_stub_and_doc.sh b/dev/generate_stub_and_doc.sh index 30cf6d1..f85e4f9 100644 --- a/dev/generate_stub_and_doc.sh +++ b/dev/generate_stub_and_doc.sh @@ -51,7 +51,7 @@ BUILD_STUB_CMD="\ export PATH=\"/opt/python/cp${PY_VERSION}-cp${PY_VERSION}/bin:\${PATH}\" \ && python3 -m pip install pybind11-stubgen \ && python3 -m pip install wheelhouse/mplib*.whl \ - && pybind11-stubgen --numpy-array-use-type-var mplib + && python3 dev/stubgen.py " # TODO: add ruff diff --git a/dev/stubgen.py b/dev/stubgen.py new file mode 100644 index 0000000..f15c09f --- /dev/null +++ b/dev/stubgen.py @@ -0,0 +1,120 @@ +from pathlib import Path + +from pybind11_stubgen import ( + BaseParser, + ExtractSignaturesFromPybind11Docstrings, + FilterClassMembers, + FilterInvalidIdentifiers, + FilterPybindInternals, + FilterTypingModuleAttributes, + FixBuiltinTypes, + FixCurrentModulePrefixInTypeNames, + FixMissing__all__Attribute, + FixMissingEnumMembersAnnotation, + FixMissingFixedSizeImport, + FixMissingImports, + FixMissingNoneHashFieldAnnotation, + FixNumpyArrayDimTypeVar, + FixNumpyArrayFlags, + FixNumpyDtype, + FixPEP585CollectionNames, + FixPybind11EnumStrDoc, + FixRedundantBuiltinsAnnotation, + FixRedundantMethodsFromBuiltinObject, + FixScipyTypeArguments, + FixTypingTypeNames, + FixValueReprRandomAddress, + IParser, + LogErrors, + LoggerData, + OverridePrintSafeValues, + ParserDispatchMixin, + Printer, + RemoveSelfAnnotation, + ReplaceReadWritePropertyWithField, + RewritePybind11EnumValueRepr, + SuggestCxxSignatureFix, + Writer, + run, +) + + +def stub_parser() -> IParser: + error_handlers_top: list[type] = [ + LoggerData, + # IgnoreAllErrors, # args.ignore_all_errors + # IgnoreInvalidIdentifierErrors, # args.ignore_invalid_identifiers + # IgnoreInvalidExpressionErrors, # args.ignore_invalid_expressions + # IgnoreUnresolvedNameErrors, # args.ignore_unresolved_names + ] + error_handlers_bottom: list[type] = [ + LogErrors, + SuggestCxxSignatureFix, + # TerminateOnFatalErrors, # args.exit_code + ] + + numpy_fixes: list[type] = [ + FixNumpyArrayDimTypeVar, # args.numpy_array_use_type_var + ] + + class Parser( + *error_handlers_top, # type: ignore[misc] + # FixMissing__future__AnnotationsImport, # ruff: PYI044 + FixMissing__all__Attribute, + FixMissingNoneHashFieldAnnotation, + FixMissingImports, + FilterTypingModuleAttributes, + FixPEP585CollectionNames, + FixTypingTypeNames, + FixScipyTypeArguments, + FixMissingFixedSizeImport, + FixMissingEnumMembersAnnotation, + OverridePrintSafeValues, + *numpy_fixes, # type: ignore[misc] + FixNumpyDtype, + FixNumpyArrayFlags, + FixCurrentModulePrefixInTypeNames, + FixBuiltinTypes, + RewritePybind11EnumValueRepr, + FilterClassMembers, + ReplaceReadWritePropertyWithField, + FilterInvalidIdentifiers, + FixValueReprRandomAddress, + FixRedundantBuiltinsAnnotation, + FilterPybindInternals, + FixRedundantMethodsFromBuiltinObject, + RemoveSelfAnnotation, + FixPybind11EnumStrDoc, + ExtractSignaturesFromPybind11Docstrings, + ParserDispatchMixin, + BaseParser, + *error_handlers_bottom, # type: ignore[misc] + ): + pass + + parser = Parser() + + # if args.enum_class_locations: + # parser.set_pybind11_enum_locations(dict(args.enum_class_locations)) + # if args.ignore_invalid_identifiers is not None: + # parser.set_ignored_invalid_identifiers(args.ignore_invalid_identifiers) + # if args.ignore_invalid_expressions is not None: + # parser.set_ignored_invalid_expressions(args.ignore_invalid_expressions) + # if args.ignore_unresolved_names is not None: + # parser.set_ignored_unresolved_names(args.ignore_unresolved_names) + # if args.print_safe_value_reprs is not None: + # parser.set_print_safe_value_pattern(args.print_safe_value_reprs) + + return parser + + +if __name__ == "__main__": + run( + parser=stub_parser(), + printer=Printer(invalid_expr_as_ellipses=True), + module_name="mplib", # args.module_name + out_dir=Path("stubs"), + sub_dir=None, + dry_run=False, + writer=Writer(stub_ext="pyi"), + ) diff --git a/docs/mplib.html b/docs/mplib.html index cee8715..ad55e85 100644 --- a/docs/mplib.html +++ b/docs/mplib.html @@ -89,9 +89,10 @@

Usage

5from importlib.metadata import version 6 7from .planner import Planner - 8# from .pymp import set_global_seed - 9 -10__version__ = version("mplib") + 8 + 9# from .pymp import set_global_seed +10 +11__version__ = version("mplib") diff --git a/mplib/__init__.pyi b/mplib/__init__.pyi index 4fdf4e3..564154f 100644 --- a/mplib/__init__.pyi +++ b/mplib/__init__.pyi @@ -2,10 +2,9 @@ .. include:: ./README.md """ -from __future__ import annotations from importlib.metadata import version from mplib.planner import Planner from . import planner from . import pymp __all__ = ['Planner', 'planner', 'pymp', 'version'] -__version__: str = '0.0.9.dev20240115+git.50741d33.dirty' +__version__: str = '0.0.9.dev20240115+git.3449b367.dirty' diff --git a/mplib/planner.pyi b/mplib/planner.pyi index f588bf4..267af92 100644 --- a/mplib/planner.pyi +++ b/mplib/planner.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations from mplib.pymp import articulation import mplib.pymp.articulation from mplib.pymp import fcl @@ -6,8 +5,8 @@ from mplib.pymp import kdl from mplib.pymp import ompl from mplib.pymp import pinocchio from mplib.pymp import planning_world -import numpy import numpy as np +import numpy import os as os import toppra as ta from toppra import algorithm as algo diff --git a/mplib/pymp/__init__.pyi b/mplib/pymp/__init__.pyi index 9518217..01dc0db 100644 --- a/mplib/pymp/__init__.pyi +++ b/mplib/pymp/__init__.pyi @@ -1,7 +1,6 @@ """ Motion planning python binding. To see its documentation, please see the stub files in your IDE. """ -from __future__ import annotations from . import articulation from . import fcl from . import kdl diff --git a/mplib/pymp/articulation.pyi b/mplib/pymp/articulation.pyi index 2cc001f..b38ee89 100644 --- a/mplib/pymp/articulation.pyi +++ b/mplib/pymp/articulation.pyi @@ -1,7 +1,6 @@ """ articulated model submodule, i.e. models with moving parts """ -from __future__ import annotations import mplib.pymp.fcl import mplib.pymp.pinocchio import numpy diff --git a/mplib/pymp/fcl.pyi b/mplib/pymp/fcl.pyi index cccf712..bd56a60 100644 --- a/mplib/pymp/fcl.pyi +++ b/mplib/pymp/fcl.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations import numpy import typing __all__ = ['BVHModel', 'Box', 'Capsule', 'CollisionGeometry', 'CollisionObject', 'CollisionRequest', 'CollisionResult', 'Contact', 'ContactPoint', 'Convex', 'CostSource', 'Cylinder', 'DistanceRequest', 'DistanceResult', 'FCLModel', 'GJKSolverType', 'GST_INDEP', 'GST_LIBCCD', 'OcTree', 'Triangle', 'collide', 'distance', 'load_mesh_as_BVH', 'load_mesh_as_Convex'] diff --git a/mplib/pymp/kdl.pyi b/mplib/pymp/kdl.pyi index 45876a3..42c7ff7 100644 --- a/mplib/pymp/kdl.pyi +++ b/mplib/pymp/kdl.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations import numpy import typing __all__ = ['KDLModel'] diff --git a/mplib/pymp/ompl.pyi b/mplib/pymp/ompl.pyi index 5d7f210..658476f 100644 --- a/mplib/pymp/ompl.pyi +++ b/mplib/pymp/ompl.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations import mplib.pymp.planning_world import numpy import typing diff --git a/mplib/pymp/pinocchio.pyi b/mplib/pymp/pinocchio.pyi index 5ecee10..ccc7498 100644 --- a/mplib/pymp/pinocchio.pyi +++ b/mplib/pymp/pinocchio.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations import numpy import typing __all__ = ['PinocchioModel'] diff --git a/mplib/pymp/planning_world.pyi b/mplib/pymp/planning_world.pyi index 2aa2643..4210b92 100644 --- a/mplib/pymp/planning_world.pyi +++ b/mplib/pymp/planning_world.pyi @@ -1,4 +1,3 @@ -from __future__ import annotations import mplib.pymp.articulation import mplib.pymp.fcl import numpy