Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0df2c9f

Browse filesBrowse files
Automate signature computation for builtin functions
This improves the compatibility with the inspect module.
1 parent ab24dc6 commit 0df2c9f
Copy full SHA for 0df2c9f

File tree

Expand file treeCollapse file tree

2 files changed

+29
-0
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+29
-0
lines changed

‎numpy/core/overrides.py

Copy file name to clipboardExpand all lines: numpy/core/overrides.py
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Implementation of __array_function__ overrides from NEP-18."""
22
import collections
33
import functools
4+
import inspect
45
import os
56
import textwrap
67

@@ -34,6 +35,15 @@ def set_array_function_like_doc(public_api):
3435
return public_api
3536

3637

38+
def add_signature(function, docstring):
39+
try:
40+
function.__signature__ = inspect._signature_fromstr(
41+
inspect.Signature, function,
42+
docstring.strip().split('\n')[0])
43+
except ValueError:
44+
pass
45+
46+
3747
add_docstring(
3848
implement_array_function,
3949
"""
@@ -213,6 +223,9 @@ def decorator(implementation):
213223
if module is not None:
214224
public_api.__module__ = module
215225

226+
if docs_from_dispatcher and dispatcher.__doc__:
227+
add_signature(public_api, dispatcher.__doc__)
228+
216229
public_api._implementation = implementation
217230

218231
return public_api

‎numpy/tests/test_public_api.py

Copy file name to clipboardExpand all lines: numpy/tests/test_public_api.py
+16Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import subprocess
33
import pkgutil
44
import types
5+
import inspect
56
import importlib
67
import warnings
78

@@ -471,3 +472,18 @@ def check_importable(module_name):
471472
raise AssertionError("Modules that are not really public but looked "
472473
"public and can not be imported: "
473474
"{}".format(module_names))
475+
476+
if sys.flags.optimize < 2:
477+
478+
def test_all_function_have_signature():
479+
allowlist = {'concatenate', 'where'}
480+
481+
for key, value in inspect.getmembers(numpy):
482+
if not inspect.isfunction(value):
483+
continue
484+
if key in allowlist:
485+
continue
486+
try:
487+
inspect.signature(value)
488+
except ValueError:
489+
raise AssertionError("No signature found for {}".format(key))

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.