Skip to content

Commit

Permalink
Add custom dev/stubgen.py based on pybind11-stubgen
Browse files Browse the repository at this point in the history
* Removes from __future__ import annotations
  • Loading branch information
KolinGuo committed Jan 15, 2024
1 parent 3449b36 commit 8c7c75f
Show file tree
Hide file tree
Showing 12 changed files with 127 additions and 15 deletions.
2 changes: 1 addition & 1 deletion dev/generate_stub_and_doc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
120 changes: 120 additions & 0 deletions dev/stubgen.py
Original file line number Diff line number Diff line change
@@ -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"),
)
7 changes: 4 additions & 3 deletions docs/mplib.html
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,10 @@ <h2 id="usage">Usage</h2>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">importlib.metadata</span> <span class="kn">import</span> <span class="n">version</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">.planner</span> <span class="kn">import</span> <span class="n">Planner</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># from .pymp import set_global_seed</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span><span class="p">(</span><span class="s2">&quot;mplib&quot;</span><span class="p">)</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># from .pymp import set_global_seed</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span><span class="p">(</span><span class="s2">&quot;mplib&quot;</span><span class="p">)</span>
</span></pre></div>


Expand Down
3 changes: 1 addition & 2 deletions mplib/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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'
3 changes: 1 addition & 2 deletions mplib/planner.pyi
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
from __future__ import annotations
from mplib.pymp import articulation
import mplib.pymp.articulation
from mplib.pymp import fcl
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
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/__init__.pyi
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/articulation.pyi
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/fcl.pyi
Original file line number Diff line number Diff line change
@@ -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']
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/kdl.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from __future__ import annotations
import numpy
import typing
__all__ = ['KDLModel']
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/ompl.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from __future__ import annotations
import mplib.pymp.planning_world
import numpy
import typing
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/pinocchio.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from __future__ import annotations
import numpy
import typing
__all__ = ['PinocchioModel']
Expand Down
1 change: 0 additions & 1 deletion mplib/pymp/planning_world.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from __future__ import annotations
import mplib.pymp.articulation
import mplib.pymp.fcl
import numpy
Expand Down

0 comments on commit 8c7c75f

Please sign in to comment.