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 5f5a31f

Browse filesBrowse files
committed
Micro-optimize check_isinstance.
- If a single type is passed in, save an iteration over a tuple. - Don't compute the type names for the error message unless an error actually occurred. Together, this speeds up `_check_isinstance(int, x=1)` by more than 2-fold, and `_check_isinstance((float, int), x=1)` by a few dozen-%.
1 parent e079bd3 commit 5f5a31f
Copy full SHA for 5f5a31f

File tree

Expand file treeCollapse file tree

1 file changed

+10
-9
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+10
-9
lines changed

‎lib/matplotlib/cbook/__init__.py

Copy file name to clipboardExpand all lines: lib/matplotlib/cbook/__init__.py
+10-9Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,21 +2241,22 @@ def _check_isinstance(_types, **kwargs):
22412241
>>> cbook._check_isinstance((SomeClass, None), arg=arg)
22422242
"""
22432243
types = _types
2244-
if isinstance(types, type) or types is None:
2245-
types = (types,)
2246-
none_allowed = None in types
2247-
types = tuple(tp for tp in types if tp is not None)
2244+
none_type = type(None)
2245+
types = ((types,) if isinstance(types, type) else
2246+
(none_type,) if types is None else
2247+
tuple(none_type if tp is None else tp for tp in types))
22482248

22492249
def type_name(tp):
2250-
return (tp.__qualname__ if tp.__module__ == "builtins"
2250+
return ("None" if tp is none_type
2251+
else tp.__qualname__ if tp.__module__ == "builtins"
22512252
else f"{tp.__module__}.{tp.__qualname__}")
22522253

2253-
names = [*map(type_name, types)]
2254-
if none_allowed:
2255-
types = (*types, type(None))
2256-
names.append("None")
22572254
for k, v in kwargs.items():
22582255
if not isinstance(v, types):
2256+
names = [*map(type_name, types)]
2257+
if "None" in names: # Move it to the end for better wording.
2258+
names.remove("None")
2259+
names.append("None")
22592260
raise TypeError(
22602261
"{!r} must be an instance of {}, not a {}".format(
22612262
k,

0 commit comments

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