Skip to main content

PEP 561 type stubs generator for pybind11 modules

Project description

pypi package

About

Generates stubs for python modules

There are several tweaks to target specifically modules compiled using pybind11

Package targets python3 only. (In fact, it’s compatible with python2 but it’s not officially supported)

Issues/PR are welcome

Install

From PYPI:

python -m pip install pybind11-stubgen

From github:

python -m pip install git+https://github.com/sizmailov/pybind11-stubgen.git

Usage

pybind11-stubgen [-h] [-o OUTPUT_DIR] \
                 [--root-module-suffix ROOT_MODULE_SUFFIX] \
                 [--no-setup-py] \
                 [--ignore-invalid {signature,defaultarg,all} [{signature,defaultarg,all} ...]] \
                 [--skip-signature-downgrade] \
                 [--bare-numpy-ndarray] \
                 [--log-level LOG_LEVEL] \
                 MODULE_NAME [MODULE_NAME ...]

Customization

If you need some docstring pre-processing, or you find the hard-coded pybind11-stubgen defaults to be off, you can make the adjustments using a tiny wrapper, see examples below.

Customization examples

Strip a license from docstring

import pybind11_stubgen
import re

license_pattern = re.compile(r"EXAMPLE CORP LICENCE")

def strip_license(docstring: str):
    return license_pattern.sub("", docstring)


if __name__ == '__main__':

    pybind11_stubgen.function_docstring_preprocessing_hooks.append(
        strip_license
    )

    pybind11_stubgen.main()

Replace List[int[3]] with Annotated[List[int], FixedSize(3)]

import pybind11_stubgen
import re

std_array_pattern = re.compile(r"List\[(int|complex|float)[(\d+)]]")

def std_array_fix(match: re.Match):
    return f"Annotated[List[{match.group(0)}], FixedSize({match.group(1)})]"


def strip_dimension_from_std_array(docstring: str):
    return std_array_pattern.sub(std_array_fix, docstring)


if __name__ == '__main__':

    pybind11_stubgen.function_docstring_preprocessing_hooks.append(
        strip_dimension_from_std_array
    )

    pybind11_stubgen.main()

Replace one type with another

import pybind11_stubgen
import re


def library_b_replacement(match: re.Match):
    type_name = match.group(0)
    return f"library_b.types.{type_name}"


if __name__ == '__main__':
    pybind11_stubgen.StubsGenerator.GLOBAL_CLASSNAME_REPLACEMENTS[
        re.compile(r"library_a\.types\.(\w+)")
    ] = library_b_replacement

    pybind11_stubgen.main()

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybind11-stubgen-0.16.0.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

pybind11_stubgen-0.16.0-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file pybind11-stubgen-0.16.0.tar.gz.

File metadata

  • Download URL: pybind11-stubgen-0.16.0.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for pybind11-stubgen-0.16.0.tar.gz
Algorithm Hash digest
SHA256 d1376e3f85f3c4bdf87a7c37a6e402f19eac306618abd723b0aca77440f8aa1e
MD5 2aa6782e6c9f8ec861b2f4619aac1e7a
BLAKE2b-256 2dac5ed3fde1d50e13fa8698583f8e9efbf2d12021f4d5d8b69b08868684620d

See more details on using hashes here.

File details

Details for the file pybind11_stubgen-0.16.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pybind11_stubgen-0.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 087f0e427405a3d2325cd1b9a1ded5de376eec17a3d07f4dca9a509d628553b0
MD5 2d6c23a7ea53fd664c9281773a205878
BLAKE2b-256 7c41f13e8400a95134bbc53375c2c63d68a8d3ca5a1c22117bea65df7a66d514

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page