xref: /third_party/python/Doc/library/inspect.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`inspect` --- Inspect live objects
27db96d56Sopenharmony_ci=======================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: inspect
57db96d56Sopenharmony_ci   :synopsis: Extract information and source code from live objects.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Ka-Ping Yee <ping@lfw.org>
87db96d56Sopenharmony_ci.. sectionauthor:: Ka-Ping Yee <ping@lfw.org>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/inspect.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`inspect` module provides several useful functions to help get
157db96d56Sopenharmony_ciinformation about live objects such as modules, classes, methods, functions,
167db96d56Sopenharmony_citracebacks, frame objects, and code objects.  For example, it can help you
177db96d56Sopenharmony_ciexamine the contents of a class, retrieve the source code of a method, extract
187db96d56Sopenharmony_ciand format the argument list for a function, or get all the information you need
197db96d56Sopenharmony_cito display a detailed traceback.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciThere are four main kinds of services provided by this module: type checking,
227db96d56Sopenharmony_cigetting source code, inspecting classes and functions, and examining the
237db96d56Sopenharmony_ciinterpreter stack.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci.. _inspect-types:
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciTypes and members
297db96d56Sopenharmony_ci-----------------
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ciThe :func:`getmembers` function retrieves the members of an object such as a
327db96d56Sopenharmony_ciclass or module. The functions whose names begin with "is" are mainly
337db96d56Sopenharmony_ciprovided as convenient choices for the second argument to :func:`getmembers`.
347db96d56Sopenharmony_ciThey also help you determine when you can expect to find the following special
357db96d56Sopenharmony_ciattributes (see :ref:`import-mod-attrs` for module attributes):
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci.. this function name is too big to fit in the ascii-art table below
387db96d56Sopenharmony_ci.. |coroutine-origin-link| replace:: :func:`sys.set_coroutine_origin_tracking_depth`
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
417db96d56Sopenharmony_ci| Type      | Attribute         | Description               |
427db96d56Sopenharmony_ci+===========+===================+===========================+
437db96d56Sopenharmony_ci| class     | __doc__           | documentation string      |
447db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
457db96d56Sopenharmony_ci|           | __name__          | name with which this      |
467db96d56Sopenharmony_ci|           |                   | class was defined         |
477db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
487db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
497db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
507db96d56Sopenharmony_ci|           | __module__        | name of module in which   |
517db96d56Sopenharmony_ci|           |                   | this class was defined    |
527db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
537db96d56Sopenharmony_ci| method    | __doc__           | documentation string      |
547db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
557db96d56Sopenharmony_ci|           | __name__          | name with which this      |
567db96d56Sopenharmony_ci|           |                   | method was defined        |
577db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
587db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
597db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
607db96d56Sopenharmony_ci|           | __func__          | function object           |
617db96d56Sopenharmony_ci|           |                   | containing implementation |
627db96d56Sopenharmony_ci|           |                   | of method                 |
637db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
647db96d56Sopenharmony_ci|           | __self__          | instance to which this    |
657db96d56Sopenharmony_ci|           |                   | method is bound, or       |
667db96d56Sopenharmony_ci|           |                   | ``None``                  |
677db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
687db96d56Sopenharmony_ci|           | __module__        | name of module in which   |
697db96d56Sopenharmony_ci|           |                   | this method was defined   |
707db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
717db96d56Sopenharmony_ci| function  | __doc__           | documentation string      |
727db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
737db96d56Sopenharmony_ci|           | __name__          | name with which this      |
747db96d56Sopenharmony_ci|           |                   | function was defined      |
757db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
767db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
777db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
787db96d56Sopenharmony_ci|           | __code__          | code object containing    |
797db96d56Sopenharmony_ci|           |                   | compiled function         |
807db96d56Sopenharmony_ci|           |                   | :term:`bytecode`          |
817db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
827db96d56Sopenharmony_ci|           | __defaults__      | tuple of any default      |
837db96d56Sopenharmony_ci|           |                   | values for positional or  |
847db96d56Sopenharmony_ci|           |                   | keyword parameters        |
857db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
867db96d56Sopenharmony_ci|           | __kwdefaults__    | mapping of any default    |
877db96d56Sopenharmony_ci|           |                   | values for keyword-only   |
887db96d56Sopenharmony_ci|           |                   | parameters                |
897db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
907db96d56Sopenharmony_ci|           | __globals__       | global namespace in which |
917db96d56Sopenharmony_ci|           |                   | this function was defined |
927db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
937db96d56Sopenharmony_ci|           | __builtins__      | builtins namespace        |
947db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
957db96d56Sopenharmony_ci|           | __annotations__   | mapping of parameters     |
967db96d56Sopenharmony_ci|           |                   | names to annotations;     |
977db96d56Sopenharmony_ci|           |                   | ``"return"`` key is       |
987db96d56Sopenharmony_ci|           |                   | reserved for return       |
997db96d56Sopenharmony_ci|           |                   | annotations.              |
1007db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1017db96d56Sopenharmony_ci|           | __module__        | name of module in which   |
1027db96d56Sopenharmony_ci|           |                   | this function was defined |
1037db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1047db96d56Sopenharmony_ci| traceback | tb_frame          | frame object at this      |
1057db96d56Sopenharmony_ci|           |                   | level                     |
1067db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1077db96d56Sopenharmony_ci|           | tb_lasti          | index of last attempted   |
1087db96d56Sopenharmony_ci|           |                   | instruction in bytecode   |
1097db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1107db96d56Sopenharmony_ci|           | tb_lineno         | current line number in    |
1117db96d56Sopenharmony_ci|           |                   | Python source code        |
1127db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1137db96d56Sopenharmony_ci|           | tb_next           | next inner traceback      |
1147db96d56Sopenharmony_ci|           |                   | object (called by this    |
1157db96d56Sopenharmony_ci|           |                   | level)                    |
1167db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1177db96d56Sopenharmony_ci| frame     | f_back            | next outer frame object   |
1187db96d56Sopenharmony_ci|           |                   | (this frame's caller)     |
1197db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1207db96d56Sopenharmony_ci|           | f_builtins        | builtins namespace seen   |
1217db96d56Sopenharmony_ci|           |                   | by this frame             |
1227db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1237db96d56Sopenharmony_ci|           | f_code            | code object being         |
1247db96d56Sopenharmony_ci|           |                   | executed in this frame    |
1257db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1267db96d56Sopenharmony_ci|           | f_globals         | global namespace seen by  |
1277db96d56Sopenharmony_ci|           |                   | this frame                |
1287db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1297db96d56Sopenharmony_ci|           | f_lasti           | index of last attempted   |
1307db96d56Sopenharmony_ci|           |                   | instruction in bytecode   |
1317db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1327db96d56Sopenharmony_ci|           | f_lineno          | current line number in    |
1337db96d56Sopenharmony_ci|           |                   | Python source code        |
1347db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1357db96d56Sopenharmony_ci|           | f_locals          | local namespace seen by   |
1367db96d56Sopenharmony_ci|           |                   | this frame                |
1377db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1387db96d56Sopenharmony_ci|           | f_trace           | tracing function for this |
1397db96d56Sopenharmony_ci|           |                   | frame, or ``None``        |
1407db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1417db96d56Sopenharmony_ci| code      | co_argcount       | number of arguments (not  |
1427db96d56Sopenharmony_ci|           |                   | including keyword only    |
1437db96d56Sopenharmony_ci|           |                   | arguments, \* or \*\*     |
1447db96d56Sopenharmony_ci|           |                   | args)                     |
1457db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1467db96d56Sopenharmony_ci|           | co_code           | string of raw compiled    |
1477db96d56Sopenharmony_ci|           |                   | bytecode                  |
1487db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1497db96d56Sopenharmony_ci|           | co_cellvars       | tuple of names of cell    |
1507db96d56Sopenharmony_ci|           |                   | variables (referenced by  |
1517db96d56Sopenharmony_ci|           |                   | containing scopes)        |
1527db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1537db96d56Sopenharmony_ci|           | co_consts         | tuple of constants used   |
1547db96d56Sopenharmony_ci|           |                   | in the bytecode           |
1557db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1567db96d56Sopenharmony_ci|           | co_filename       | name of file in which     |
1577db96d56Sopenharmony_ci|           |                   | this code object was      |
1587db96d56Sopenharmony_ci|           |                   | created                   |
1597db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1607db96d56Sopenharmony_ci|           | co_firstlineno    | number of first line in   |
1617db96d56Sopenharmony_ci|           |                   | Python source code        |
1627db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1637db96d56Sopenharmony_ci|           | co_flags          | bitmap of ``CO_*`` flags, |
1647db96d56Sopenharmony_ci|           |                   | read more :ref:`here      |
1657db96d56Sopenharmony_ci|           |                   | <inspect-module-co-flags>`|
1667db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1677db96d56Sopenharmony_ci|           | co_lnotab         | encoded mapping of line   |
1687db96d56Sopenharmony_ci|           |                   | numbers to bytecode       |
1697db96d56Sopenharmony_ci|           |                   | indices                   |
1707db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1717db96d56Sopenharmony_ci|           | co_freevars       | tuple of names of free    |
1727db96d56Sopenharmony_ci|           |                   | variables (referenced via |
1737db96d56Sopenharmony_ci|           |                   | a function's closure)     |
1747db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1757db96d56Sopenharmony_ci|           | co_posonlyargcount| number of positional only |
1767db96d56Sopenharmony_ci|           |                   | arguments                 |
1777db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1787db96d56Sopenharmony_ci|           | co_kwonlyargcount | number of keyword only    |
1797db96d56Sopenharmony_ci|           |                   | arguments (not including  |
1807db96d56Sopenharmony_ci|           |                   | \*\* arg)                 |
1817db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1827db96d56Sopenharmony_ci|           | co_name           | name with which this code |
1837db96d56Sopenharmony_ci|           |                   | object was defined        |
1847db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1857db96d56Sopenharmony_ci|           | co_qualname       | fully qualified name with |
1867db96d56Sopenharmony_ci|           |                   | which this code object    |
1877db96d56Sopenharmony_ci|           |                   | was defined               |
1887db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1897db96d56Sopenharmony_ci|           | co_names          | tuple of names other      |
1907db96d56Sopenharmony_ci|           |                   | than arguments and        |
1917db96d56Sopenharmony_ci|           |                   | function locals           |
1927db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1937db96d56Sopenharmony_ci|           | co_nlocals        | number of local variables |
1947db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1957db96d56Sopenharmony_ci|           | co_stacksize      | virtual machine stack     |
1967db96d56Sopenharmony_ci|           |                   | space required            |
1977db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
1987db96d56Sopenharmony_ci|           | co_varnames       | tuple of names of         |
1997db96d56Sopenharmony_ci|           |                   | arguments and local       |
2007db96d56Sopenharmony_ci|           |                   | variables                 |
2017db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2027db96d56Sopenharmony_ci| generator | __name__          | name                      |
2037db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2047db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
2057db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2067db96d56Sopenharmony_ci|           | gi_frame          | frame                     |
2077db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2087db96d56Sopenharmony_ci|           | gi_running        | is the generator running? |
2097db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2107db96d56Sopenharmony_ci|           | gi_code           | code                      |
2117db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2127db96d56Sopenharmony_ci|           | gi_yieldfrom      | object being iterated by  |
2137db96d56Sopenharmony_ci|           |                   | ``yield from``, or        |
2147db96d56Sopenharmony_ci|           |                   | ``None``                  |
2157db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2167db96d56Sopenharmony_ci| coroutine | __name__          | name                      |
2177db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2187db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
2197db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2207db96d56Sopenharmony_ci|           | cr_await          | object being awaited on,  |
2217db96d56Sopenharmony_ci|           |                   | or ``None``               |
2227db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2237db96d56Sopenharmony_ci|           | cr_frame          | frame                     |
2247db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2257db96d56Sopenharmony_ci|           | cr_running        | is the coroutine running? |
2267db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2277db96d56Sopenharmony_ci|           | cr_code           | code                      |
2287db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2297db96d56Sopenharmony_ci|           | cr_origin         | where coroutine was       |
2307db96d56Sopenharmony_ci|           |                   | created, or ``None``. See |
2317db96d56Sopenharmony_ci|           |                   | |coroutine-origin-link|   |
2327db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2337db96d56Sopenharmony_ci| builtin   | __doc__           | documentation string      |
2347db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2357db96d56Sopenharmony_ci|           | __name__          | original name of this     |
2367db96d56Sopenharmony_ci|           |                   | function or method        |
2377db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2387db96d56Sopenharmony_ci|           | __qualname__      | qualified name            |
2397db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2407db96d56Sopenharmony_ci|           | __self__          | instance to which a       |
2417db96d56Sopenharmony_ci|           |                   | method is bound, or       |
2427db96d56Sopenharmony_ci|           |                   | ``None``                  |
2437db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci.. versionchanged:: 3.5
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   Add ``__qualname__`` and ``gi_yieldfrom`` attributes to generators.
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ci   The ``__name__`` attribute of generators is now set from the function
2507db96d56Sopenharmony_ci   name, instead of the code name, and it can now be modified.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci.. versionchanged:: 3.7
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci   Add ``cr_origin`` attribute to coroutines.
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. versionchanged:: 3.10
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Add ``__builtins__`` attribute to functions.
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci.. function:: getmembers(object[, predicate])
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   Return all the members of an object in a list of ``(name, value)``
2637db96d56Sopenharmony_ci   pairs sorted by name. If the optional *predicate* argument—which will be
2647db96d56Sopenharmony_ci   called with the ``value`` object of each member—is supplied, only members
2657db96d56Sopenharmony_ci   for which the predicate returns a true value are included.
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci   .. note::
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci      :func:`getmembers` will only return class attributes defined in the
2707db96d56Sopenharmony_ci      metaclass when the argument is a class and those attributes have been
2717db96d56Sopenharmony_ci      listed in the metaclass' custom :meth:`__dir__`.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci.. function:: getmembers_static(object[, predicate])
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci    Return all the members of an object in a list of ``(name, value)``
2777db96d56Sopenharmony_ci    pairs sorted by name without triggering dynamic lookup via the descriptor
2787db96d56Sopenharmony_ci    protocol, __getattr__ or __getattribute__. Optionally, only return members
2797db96d56Sopenharmony_ci    that satisfy a given predicate.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci    .. note::
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci        :func:`getmembers_static` may not be able to retrieve all members
2847db96d56Sopenharmony_ci        that getmembers can fetch (like dynamically created attributes)
2857db96d56Sopenharmony_ci        and may find members that getmembers can't (like descriptors
2867db96d56Sopenharmony_ci        that raise AttributeError). It can also return descriptor objects
2877db96d56Sopenharmony_ci        instead of instance members in some cases.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci    .. versionadded:: 3.11
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci.. function:: getmodulename(path)
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci   Return the name of the module named by the file *path*, without including the
2957db96d56Sopenharmony_ci   names of enclosing packages. The file extension is checked against all of
2967db96d56Sopenharmony_ci   the entries in :func:`importlib.machinery.all_suffixes`. If it matches,
2977db96d56Sopenharmony_ci   the final path component is returned with the extension removed.
2987db96d56Sopenharmony_ci   Otherwise, ``None`` is returned.
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci   Note that this function *only* returns a meaningful name for actual
3017db96d56Sopenharmony_ci   Python modules - paths that potentially refer to Python packages will
3027db96d56Sopenharmony_ci   still return ``None``.
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci   .. versionchanged:: 3.3
3057db96d56Sopenharmony_ci      The function is based directly on :mod:`importlib`.
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci.. function:: ismodule(object)
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci   Return ``True`` if the object is a module.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci.. function:: isclass(object)
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   Return ``True`` if the object is a class, whether built-in or created in Python
3167db96d56Sopenharmony_ci   code.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci.. function:: ismethod(object)
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   Return ``True`` if the object is a bound method written in Python.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci.. function:: isfunction(object)
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci   Return ``True`` if the object is a Python function, which includes functions
3277db96d56Sopenharmony_ci   created by a :term:`lambda` expression.
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci.. function:: isgeneratorfunction(object)
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   Return ``True`` if the object is a Python generator function.
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   .. versionchanged:: 3.8
3357db96d56Sopenharmony_ci      Functions wrapped in :func:`functools.partial` now return ``True`` if the
3367db96d56Sopenharmony_ci      wrapped function is a Python generator function.
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci.. function:: isgenerator(object)
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci   Return ``True`` if the object is a generator.
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci.. function:: iscoroutinefunction(object)
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci   Return ``True`` if the object is a :term:`coroutine function`
3477db96d56Sopenharmony_ci   (a function defined with an :keyword:`async def` syntax).
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci   .. versionadded:: 3.5
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci   .. versionchanged:: 3.8
3527db96d56Sopenharmony_ci      Functions wrapped in :func:`functools.partial` now return ``True`` if the
3537db96d56Sopenharmony_ci      wrapped function is a :term:`coroutine function`.
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci.. function:: iscoroutine(object)
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci   Return ``True`` if the object is a :term:`coroutine` created by an
3597db96d56Sopenharmony_ci   :keyword:`async def` function.
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci   .. versionadded:: 3.5
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ci.. function:: isawaitable(object)
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci   Return ``True`` if the object can be used in :keyword:`await` expression.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   Can also be used to distinguish generator-based coroutines from regular
3697db96d56Sopenharmony_ci   generators::
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci      def gen():
3727db96d56Sopenharmony_ci          yield
3737db96d56Sopenharmony_ci      @types.coroutine
3747db96d56Sopenharmony_ci      def gen_coro():
3757db96d56Sopenharmony_ci          yield
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci      assert not isawaitable(gen())
3787db96d56Sopenharmony_ci      assert isawaitable(gen_coro())
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   .. versionadded:: 3.5
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci.. function:: isasyncgenfunction(object)
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci   Return ``True`` if the object is an :term:`asynchronous generator` function,
3867db96d56Sopenharmony_ci   for example::
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci    >>> async def agen():
3897db96d56Sopenharmony_ci    ...     yield 1
3907db96d56Sopenharmony_ci    ...
3917db96d56Sopenharmony_ci    >>> inspect.isasyncgenfunction(agen)
3927db96d56Sopenharmony_ci    True
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci   .. versionadded:: 3.6
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_ci   .. versionchanged:: 3.8
3977db96d56Sopenharmony_ci      Functions wrapped in :func:`functools.partial` now return ``True`` if the
3987db96d56Sopenharmony_ci      wrapped function is a :term:`asynchronous generator` function.
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci.. function:: isasyncgen(object)
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci   Return ``True`` if the object is an :term:`asynchronous generator iterator`
4047db96d56Sopenharmony_ci   created by an :term:`asynchronous generator` function.
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci   .. versionadded:: 3.6
4077db96d56Sopenharmony_ci
4087db96d56Sopenharmony_ci.. function:: istraceback(object)
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   Return ``True`` if the object is a traceback.
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci.. function:: isframe(object)
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci   Return ``True`` if the object is a frame.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci.. function:: iscode(object)
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci   Return ``True`` if the object is a code.
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci.. function:: isbuiltin(object)
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci   Return ``True`` if the object is a built-in function or a bound built-in method.
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci.. function:: ismethodwrapper(object)
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   Return ``True`` if the type of object is a :class:`~types.MethodWrapperType`.
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci   These are instances of :class:`~types.MethodWrapperType`, such as :meth:`~object.__str__`,
4337db96d56Sopenharmony_ci   :meth:`~object.__eq__` and :meth:`~object.__repr__`.
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci   .. versionadded:: 3.11
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ci.. function:: isroutine(object)
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci   Return ``True`` if the object is a user-defined or built-in function or method.
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci.. function:: isabstract(object)
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci   Return ``True`` if the object is an abstract base class.
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci.. function:: ismethoddescriptor(object)
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci   Return ``True`` if the object is a method descriptor, but not if
4517db96d56Sopenharmony_ci   :func:`ismethod`, :func:`isclass`, :func:`isfunction` or :func:`isbuiltin`
4527db96d56Sopenharmony_ci   are true.
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci   This, for example, is true of ``int.__add__``.  An object passing this test
4557db96d56Sopenharmony_ci   has a :meth:`~object.__get__` method but not a :meth:`~object.__set__`
4567db96d56Sopenharmony_ci   method, but beyond that the set of attributes varies.  A
4577db96d56Sopenharmony_ci   :attr:`~definition.__name__` attribute is usually
4587db96d56Sopenharmony_ci   sensible, and :attr:`__doc__` often is.
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci   Methods implemented via descriptors that also pass one of the other tests
4617db96d56Sopenharmony_ci   return ``False`` from the :func:`ismethoddescriptor` test, simply because the
4627db96d56Sopenharmony_ci   other tests promise more -- you can, e.g., count on having the
4637db96d56Sopenharmony_ci   :attr:`__func__` attribute (etc) when an object passes :func:`ismethod`.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci.. function:: isdatadescriptor(object)
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci   Return ``True`` if the object is a data descriptor.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci   Data descriptors have a :attr:`~object.__set__` or a :attr:`~object.__delete__` method.
4717db96d56Sopenharmony_ci   Examples are properties (defined in Python), getsets, and members.  The
4727db96d56Sopenharmony_ci   latter two are defined in C and there are more specific tests available for
4737db96d56Sopenharmony_ci   those types, which is robust across Python implementations.  Typically, data
4747db96d56Sopenharmony_ci   descriptors will also have :attr:`~definition.__name__` and :attr:`__doc__` attributes
4757db96d56Sopenharmony_ci   (properties, getsets, and members have both of these attributes), but this is
4767db96d56Sopenharmony_ci   not guaranteed.
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci.. function:: isgetsetdescriptor(object)
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci   Return ``True`` if the object is a getset descriptor.
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   .. impl-detail::
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci      getsets are attributes defined in extension modules via
4867db96d56Sopenharmony_ci      :c:type:`PyGetSetDef` structures.  For Python implementations without such
4877db96d56Sopenharmony_ci      types, this method will always return ``False``.
4887db96d56Sopenharmony_ci
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_ci.. function:: ismemberdescriptor(object)
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   Return ``True`` if the object is a member descriptor.
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci   .. impl-detail::
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ci      Member descriptors are attributes defined in extension modules via
4977db96d56Sopenharmony_ci      :c:type:`PyMemberDef` structures.  For Python implementations without such
4987db96d56Sopenharmony_ci      types, this method will always return ``False``.
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci.. _inspect-source:
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ciRetrieving source code
5047db96d56Sopenharmony_ci----------------------
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci.. function:: getdoc(object)
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci   Get the documentation string for an object, cleaned up with :func:`cleandoc`.
5097db96d56Sopenharmony_ci   If the documentation string for an object is not provided and the object is
5107db96d56Sopenharmony_ci   a class, a method, a property or a descriptor, retrieve the documentation
5117db96d56Sopenharmony_ci   string from the inheritance hierarchy.
5127db96d56Sopenharmony_ci   Return ``None`` if the documentation string is invalid or missing.
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci   .. versionchanged:: 3.5
5157db96d56Sopenharmony_ci      Documentation strings are now inherited if not overridden.
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci.. function:: getcomments(object)
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci   Return in a single string any lines of comments immediately preceding the
5217db96d56Sopenharmony_ci   object's source code (for a class, function, or method), or at the top of the
5227db96d56Sopenharmony_ci   Python source file (if the object is a module).  If the object's source code
5237db96d56Sopenharmony_ci   is unavailable, return ``None``.  This could happen if the object has been
5247db96d56Sopenharmony_ci   defined in C or the interactive shell.
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci.. function:: getfile(object)
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci   Return the name of the (text or binary) file in which an object was defined.
5307db96d56Sopenharmony_ci   This will fail with a :exc:`TypeError` if the object is a built-in module,
5317db96d56Sopenharmony_ci   class, or function.
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci.. function:: getmodule(object)
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci   Try to guess which module an object was defined in. Return ``None``
5377db96d56Sopenharmony_ci   if the module cannot be determined.
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci
5407db96d56Sopenharmony_ci.. function:: getsourcefile(object)
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci   Return the name of the Python source file in which an object was defined
5437db96d56Sopenharmony_ci   or ``None`` if no way can be identified to get the source.  This
5447db96d56Sopenharmony_ci   will fail with a :exc:`TypeError` if the object is a built-in module, class, or
5457db96d56Sopenharmony_ci   function.
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci.. function:: getsourcelines(object)
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci   Return a list of source lines and starting line number for an object. The
5517db96d56Sopenharmony_ci   argument may be a module, class, method, function, traceback, frame, or code
5527db96d56Sopenharmony_ci   object.  The source code is returned as a list of the lines corresponding to the
5537db96d56Sopenharmony_ci   object and the line number indicates where in the original source file the first
5547db96d56Sopenharmony_ci   line of code was found.  An :exc:`OSError` is raised if the source code cannot
5557db96d56Sopenharmony_ci   be retrieved.
5567db96d56Sopenharmony_ci   A :exc:`TypeError` is raised if the object is a built-in module, class, or
5577db96d56Sopenharmony_ci   function.
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci   .. versionchanged:: 3.3
5607db96d56Sopenharmony_ci      :exc:`OSError` is raised instead of :exc:`IOError`, now an alias of the
5617db96d56Sopenharmony_ci      former.
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ci.. function:: getsource(object)
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci   Return the text of the source code for an object. The argument may be a module,
5677db96d56Sopenharmony_ci   class, method, function, traceback, frame, or code object.  The source code is
5687db96d56Sopenharmony_ci   returned as a single string.  An :exc:`OSError` is raised if the source code
5697db96d56Sopenharmony_ci   cannot be retrieved.
5707db96d56Sopenharmony_ci   A :exc:`TypeError` is raised if the object is a built-in module, class, or
5717db96d56Sopenharmony_ci   function.
5727db96d56Sopenharmony_ci
5737db96d56Sopenharmony_ci   .. versionchanged:: 3.3
5747db96d56Sopenharmony_ci      :exc:`OSError` is raised instead of :exc:`IOError`, now an alias of the
5757db96d56Sopenharmony_ci      former.
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci.. function:: cleandoc(doc)
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   Clean up indentation from docstrings that are indented to line up with blocks
5817db96d56Sopenharmony_ci   of code.
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci   All leading whitespace is removed from the first line.  Any leading whitespace
5847db96d56Sopenharmony_ci   that can be uniformly removed from the second line onwards is removed.  Empty
5857db96d56Sopenharmony_ci   lines at the beginning and end are subsequently removed.  Also, all tabs are
5867db96d56Sopenharmony_ci   expanded to spaces.
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci.. _inspect-signature-object:
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ciIntrospecting callables with the Signature object
5927db96d56Sopenharmony_ci-------------------------------------------------
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ci.. versionadded:: 3.3
5957db96d56Sopenharmony_ci
5967db96d56Sopenharmony_ciThe Signature object represents the call signature of a callable object and its
5977db96d56Sopenharmony_cireturn annotation.  To retrieve a Signature object, use the :func:`signature`
5987db96d56Sopenharmony_cifunction.
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci.. function:: signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False)
6017db96d56Sopenharmony_ci
6027db96d56Sopenharmony_ci   Return a :class:`Signature` object for the given ``callable``::
6037db96d56Sopenharmony_ci
6047db96d56Sopenharmony_ci      >>> from inspect import signature
6057db96d56Sopenharmony_ci      >>> def foo(a, *, b:int, **kwargs):
6067db96d56Sopenharmony_ci      ...     pass
6077db96d56Sopenharmony_ci
6087db96d56Sopenharmony_ci      >>> sig = signature(foo)
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ci      >>> str(sig)
6117db96d56Sopenharmony_ci      '(a, *, b:int, **kwargs)'
6127db96d56Sopenharmony_ci
6137db96d56Sopenharmony_ci      >>> str(sig.parameters['b'])
6147db96d56Sopenharmony_ci      'b:int'
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ci      >>> sig.parameters['b'].annotation
6177db96d56Sopenharmony_ci      <class 'int'>
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci   Accepts a wide range of Python callables, from plain functions and classes to
6207db96d56Sopenharmony_ci   :func:`functools.partial` objects.
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci   For objects defined in modules using stringized annotations
6237db96d56Sopenharmony_ci   (``from __future__ import annotations``), :func:`signature` will
6247db96d56Sopenharmony_ci   attempt to automatically un-stringize the annotations using
6257db96d56Sopenharmony_ci   :func:`inspect.get_annotations()`.  The
6267db96d56Sopenharmony_ci   ``global``, ``locals``, and ``eval_str`` parameters are passed
6277db96d56Sopenharmony_ci   into :func:`inspect.get_annotations()` when resolving the
6287db96d56Sopenharmony_ci   annotations; see the documentation for :func:`inspect.get_annotations()`
6297db96d56Sopenharmony_ci   for instructions on how to use these parameters.
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci   Raises :exc:`ValueError` if no signature can be provided, and
6327db96d56Sopenharmony_ci   :exc:`TypeError` if that type of object is not supported.  Also,
6337db96d56Sopenharmony_ci   if the annotations are stringized, and ``eval_str`` is not false,
6347db96d56Sopenharmony_ci   the ``eval()`` call(s) to un-stringize the annotations could
6357db96d56Sopenharmony_ci   potentially raise any kind of exception.
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci   A slash(/) in the signature of a function denotes that the parameters prior
6387db96d56Sopenharmony_ci   to it are positional-only. For more info, see
6397db96d56Sopenharmony_ci   :ref:`the FAQ entry on positional-only parameters <faq-positional-only-arguments>`.
6407db96d56Sopenharmony_ci
6417db96d56Sopenharmony_ci   .. versionadded:: 3.5
6427db96d56Sopenharmony_ci      ``follow_wrapped`` parameter. Pass ``False`` to get a signature of
6437db96d56Sopenharmony_ci      ``callable`` specifically (``callable.__wrapped__`` will not be used to
6447db96d56Sopenharmony_ci      unwrap decorated callables.)
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ci   .. versionadded:: 3.10
6477db96d56Sopenharmony_ci      ``globals``, ``locals``, and ``eval_str`` parameters.
6487db96d56Sopenharmony_ci
6497db96d56Sopenharmony_ci   .. note::
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci      Some callables may not be introspectable in certain implementations of
6527db96d56Sopenharmony_ci      Python.  For example, in CPython, some built-in functions defined in
6537db96d56Sopenharmony_ci      C provide no metadata about their arguments.
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_ci.. class:: Signature(parameters=None, *, return_annotation=Signature.empty)
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci   A Signature object represents the call signature of a function and its return
6597db96d56Sopenharmony_ci   annotation.  For each parameter accepted by the function it stores a
6607db96d56Sopenharmony_ci   :class:`Parameter` object in its :attr:`parameters` collection.
6617db96d56Sopenharmony_ci
6627db96d56Sopenharmony_ci   The optional *parameters* argument is a sequence of :class:`Parameter`
6637db96d56Sopenharmony_ci   objects, which is validated to check that there are no parameters with
6647db96d56Sopenharmony_ci   duplicate names, and that the parameters are in the right order, i.e.
6657db96d56Sopenharmony_ci   positional-only first, then positional-or-keyword, and that parameters with
6667db96d56Sopenharmony_ci   defaults follow parameters without defaults.
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci   The optional *return_annotation* argument, can be an arbitrary Python object,
6697db96d56Sopenharmony_ci   is the "return" annotation of the callable.
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci   Signature objects are *immutable*.  Use :meth:`Signature.replace` to make a
6727db96d56Sopenharmony_ci   modified copy.
6737db96d56Sopenharmony_ci
6747db96d56Sopenharmony_ci   .. versionchanged:: 3.5
6757db96d56Sopenharmony_ci      Signature objects are picklable and :term:`hashable`.
6767db96d56Sopenharmony_ci
6777db96d56Sopenharmony_ci   .. attribute:: Signature.empty
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci      A special class-level marker to specify absence of a return annotation.
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci   .. attribute:: Signature.parameters
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci      An ordered mapping of parameters' names to the corresponding
6847db96d56Sopenharmony_ci      :class:`Parameter` objects.  Parameters appear in strict definition
6857db96d56Sopenharmony_ci      order, including keyword-only parameters.
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci      .. versionchanged:: 3.7
6887db96d56Sopenharmony_ci         Python only explicitly guaranteed that it preserved the declaration
6897db96d56Sopenharmony_ci         order of keyword-only parameters as of version 3.7, although in practice
6907db96d56Sopenharmony_ci         this order had always been preserved in Python 3.
6917db96d56Sopenharmony_ci
6927db96d56Sopenharmony_ci   .. attribute:: Signature.return_annotation
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ci      The "return" annotation for the callable.  If the callable has no "return"
6957db96d56Sopenharmony_ci      annotation, this attribute is set to :attr:`Signature.empty`.
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci   .. method:: Signature.bind(*args, **kwargs)
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci      Create a mapping from positional and keyword arguments to parameters.
7007db96d56Sopenharmony_ci      Returns :class:`BoundArguments` if ``*args`` and ``**kwargs`` match the
7017db96d56Sopenharmony_ci      signature, or raises a :exc:`TypeError`.
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci   .. method:: Signature.bind_partial(*args, **kwargs)
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ci      Works the same way as :meth:`Signature.bind`, but allows the omission of
7067db96d56Sopenharmony_ci      some required arguments (mimics :func:`functools.partial` behavior.)
7077db96d56Sopenharmony_ci      Returns :class:`BoundArguments`, or raises a :exc:`TypeError` if the
7087db96d56Sopenharmony_ci      passed arguments do not match the signature.
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci   .. method:: Signature.replace(*[, parameters][, return_annotation])
7117db96d56Sopenharmony_ci
7127db96d56Sopenharmony_ci      Create a new Signature instance based on the instance replace was invoked
7137db96d56Sopenharmony_ci      on.  It is possible to pass different ``parameters`` and/or
7147db96d56Sopenharmony_ci      ``return_annotation`` to override the corresponding properties of the base
7157db96d56Sopenharmony_ci      signature.  To remove return_annotation from the copied Signature, pass in
7167db96d56Sopenharmony_ci      :attr:`Signature.empty`.
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ci      ::
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ci         >>> def test(a, b):
7217db96d56Sopenharmony_ci         ...     pass
7227db96d56Sopenharmony_ci         >>> sig = signature(test)
7237db96d56Sopenharmony_ci         >>> new_sig = sig.replace(return_annotation="new return anno")
7247db96d56Sopenharmony_ci         >>> str(new_sig)
7257db96d56Sopenharmony_ci         "(a, b) -> 'new return anno'"
7267db96d56Sopenharmony_ci
7277db96d56Sopenharmony_ci   .. classmethod:: Signature.from_callable(obj, *, follow_wrapped=True, globalns=None, localns=None)
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci       Return a :class:`Signature` (or its subclass) object for a given callable
7307db96d56Sopenharmony_ci       ``obj``.  Pass ``follow_wrapped=False`` to get a signature of ``obj``
7317db96d56Sopenharmony_ci       without unwrapping its ``__wrapped__`` chain. ``globalns`` and
7327db96d56Sopenharmony_ci       ``localns`` will be used as the namespaces when resolving annotations.
7337db96d56Sopenharmony_ci
7347db96d56Sopenharmony_ci       This method simplifies subclassing of :class:`Signature`::
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ci         class MySignature(Signature):
7377db96d56Sopenharmony_ci             pass
7387db96d56Sopenharmony_ci         sig = MySignature.from_callable(min)
7397db96d56Sopenharmony_ci         assert isinstance(sig, MySignature)
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci       .. versionadded:: 3.5
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci       .. versionadded:: 3.10
7447db96d56Sopenharmony_ci          ``globalns`` and ``localns`` parameters.
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci.. class:: Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci   Parameter objects are *immutable*.  Instead of modifying a Parameter object,
7507db96d56Sopenharmony_ci   you can use :meth:`Parameter.replace` to create a modified copy.
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci   .. versionchanged:: 3.5
7537db96d56Sopenharmony_ci      Parameter objects are picklable and :term:`hashable`.
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci   .. attribute:: Parameter.empty
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci      A special class-level marker to specify absence of default values and
7587db96d56Sopenharmony_ci      annotations.
7597db96d56Sopenharmony_ci
7607db96d56Sopenharmony_ci   .. attribute:: Parameter.name
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ci      The name of the parameter as a string.  The name must be a valid
7637db96d56Sopenharmony_ci      Python identifier.
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ci      .. impl-detail::
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci         CPython generates implicit parameter names of the form ``.0`` on the
7687db96d56Sopenharmony_ci         code objects used to implement comprehensions and generator
7697db96d56Sopenharmony_ci         expressions.
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci         .. versionchanged:: 3.6
7727db96d56Sopenharmony_ci            These parameter names are exposed by this module as names like
7737db96d56Sopenharmony_ci            ``implicit0``.
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci   .. attribute:: Parameter.default
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ci      The default value for the parameter.  If the parameter has no default
7787db96d56Sopenharmony_ci      value, this attribute is set to :attr:`Parameter.empty`.
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   .. attribute:: Parameter.annotation
7817db96d56Sopenharmony_ci
7827db96d56Sopenharmony_ci      The annotation for the parameter.  If the parameter has no annotation,
7837db96d56Sopenharmony_ci      this attribute is set to :attr:`Parameter.empty`.
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci   .. attribute:: Parameter.kind
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci      Describes how argument values are bound to the parameter.  The possible
7887db96d56Sopenharmony_ci      values are accessible via :class:`Parameter` (like ``Parameter.KEYWORD_ONLY``),
7897db96d56Sopenharmony_ci      and support comparison and ordering, in the following order:
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci      .. tabularcolumns:: |l|L|
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
7947db96d56Sopenharmony_ci      |    Name                | Meaning                                      |
7957db96d56Sopenharmony_ci      +========================+==============================================+
7967db96d56Sopenharmony_ci      | *POSITIONAL_ONLY*      | Value must be supplied as a positional       |
7977db96d56Sopenharmony_ci      |                        | argument. Positional only parameters are     |
7987db96d56Sopenharmony_ci      |                        | those which appear before a ``/`` entry (if  |
7997db96d56Sopenharmony_ci      |                        | present) in a Python function definition.    |
8007db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
8017db96d56Sopenharmony_ci      | *POSITIONAL_OR_KEYWORD*| Value may be supplied as either a keyword or |
8027db96d56Sopenharmony_ci      |                        | positional argument (this is the standard    |
8037db96d56Sopenharmony_ci      |                        | binding behaviour for functions implemented  |
8047db96d56Sopenharmony_ci      |                        | in Python.)                                  |
8057db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
8067db96d56Sopenharmony_ci      | *VAR_POSITIONAL*       | A tuple of positional arguments that aren't  |
8077db96d56Sopenharmony_ci      |                        | bound to any other parameter. This           |
8087db96d56Sopenharmony_ci      |                        | corresponds to a ``*args`` parameter in a    |
8097db96d56Sopenharmony_ci      |                        | Python function definition.                  |
8107db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
8117db96d56Sopenharmony_ci      | *KEYWORD_ONLY*         | Value must be supplied as a keyword argument.|
8127db96d56Sopenharmony_ci      |                        | Keyword only parameters are those which      |
8137db96d56Sopenharmony_ci      |                        | appear after a ``*`` or ``*args`` entry in a |
8147db96d56Sopenharmony_ci      |                        | Python function definition.                  |
8157db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
8167db96d56Sopenharmony_ci      | *VAR_KEYWORD*          | A dict of keyword arguments that aren't bound|
8177db96d56Sopenharmony_ci      |                        | to any other parameter. This corresponds to a|
8187db96d56Sopenharmony_ci      |                        | ``**kwargs`` parameter in a Python function  |
8197db96d56Sopenharmony_ci      |                        | definition.                                  |
8207db96d56Sopenharmony_ci      +------------------------+----------------------------------------------+
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci      Example: print all keyword-only arguments without default values::
8237db96d56Sopenharmony_ci
8247db96d56Sopenharmony_ci         >>> def foo(a, b, *, c, d=10):
8257db96d56Sopenharmony_ci         ...     pass
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci         >>> sig = signature(foo)
8287db96d56Sopenharmony_ci         >>> for param in sig.parameters.values():
8297db96d56Sopenharmony_ci         ...     if (param.kind == param.KEYWORD_ONLY and
8307db96d56Sopenharmony_ci         ...                        param.default is param.empty):
8317db96d56Sopenharmony_ci         ...         print('Parameter:', param)
8327db96d56Sopenharmony_ci         Parameter: c
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ci   .. attribute:: Parameter.kind.description
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci      Describes a enum value of Parameter.kind.
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci      .. versionadded:: 3.8
8397db96d56Sopenharmony_ci
8407db96d56Sopenharmony_ci      Example: print all descriptions of arguments::
8417db96d56Sopenharmony_ci
8427db96d56Sopenharmony_ci         >>> def foo(a, b, *, c, d=10):
8437db96d56Sopenharmony_ci         ...     pass
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci         >>> sig = signature(foo)
8467db96d56Sopenharmony_ci         >>> for param in sig.parameters.values():
8477db96d56Sopenharmony_ci         ...     print(param.kind.description)
8487db96d56Sopenharmony_ci         positional or keyword
8497db96d56Sopenharmony_ci         positional or keyword
8507db96d56Sopenharmony_ci         keyword-only
8517db96d56Sopenharmony_ci         keyword-only
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci   .. method:: Parameter.replace(*[, name][, kind][, default][, annotation])
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci      Create a new Parameter instance based on the instance replaced was invoked
8567db96d56Sopenharmony_ci      on.  To override a :class:`Parameter` attribute, pass the corresponding
8577db96d56Sopenharmony_ci      argument.  To remove a default value or/and an annotation from a
8587db96d56Sopenharmony_ci      Parameter, pass :attr:`Parameter.empty`.
8597db96d56Sopenharmony_ci
8607db96d56Sopenharmony_ci      ::
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci         >>> from inspect import Parameter
8637db96d56Sopenharmony_ci         >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42)
8647db96d56Sopenharmony_ci         >>> str(param)
8657db96d56Sopenharmony_ci         'foo=42'
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci         >>> str(param.replace()) # Will create a shallow copy of 'param'
8687db96d56Sopenharmony_ci         'foo=42'
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci         >>> str(param.replace(default=Parameter.empty, annotation='spam'))
8717db96d56Sopenharmony_ci         "foo:'spam'"
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci   .. versionchanged:: 3.4
8747db96d56Sopenharmony_ci      In Python 3.3 Parameter objects were allowed to have ``name`` set
8757db96d56Sopenharmony_ci      to ``None`` if their ``kind`` was set to ``POSITIONAL_ONLY``.
8767db96d56Sopenharmony_ci      This is no longer permitted.
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci.. class:: BoundArguments
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ci   Result of a :meth:`Signature.bind` or :meth:`Signature.bind_partial` call.
8817db96d56Sopenharmony_ci   Holds the mapping of arguments to the function's parameters.
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ci   .. attribute:: BoundArguments.arguments
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci      A mutable mapping of parameters' names to arguments' values.
8867db96d56Sopenharmony_ci      Contains only explicitly bound arguments.  Changes in :attr:`arguments`
8877db96d56Sopenharmony_ci      will reflect in :attr:`args` and :attr:`kwargs`.
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci      Should be used in conjunction with :attr:`Signature.parameters` for any
8907db96d56Sopenharmony_ci      argument processing purposes.
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ci      .. note::
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci         Arguments for which :meth:`Signature.bind` or
8957db96d56Sopenharmony_ci         :meth:`Signature.bind_partial` relied on a default value are skipped.
8967db96d56Sopenharmony_ci         However, if needed, use :meth:`BoundArguments.apply_defaults` to add
8977db96d56Sopenharmony_ci         them.
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci      .. versionchanged:: 3.9
9007db96d56Sopenharmony_ci         :attr:`arguments` is now of type :class:`dict`. Formerly, it was of
9017db96d56Sopenharmony_ci         type :class:`collections.OrderedDict`.
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci   .. attribute:: BoundArguments.args
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ci      A tuple of positional arguments values.  Dynamically computed from the
9067db96d56Sopenharmony_ci      :attr:`arguments` attribute.
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci   .. attribute:: BoundArguments.kwargs
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_ci      A dict of keyword arguments values.  Dynamically computed from the
9117db96d56Sopenharmony_ci      :attr:`arguments` attribute.
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci   .. attribute:: BoundArguments.signature
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci      A reference to the parent :class:`Signature` object.
9167db96d56Sopenharmony_ci
9177db96d56Sopenharmony_ci   .. method:: BoundArguments.apply_defaults()
9187db96d56Sopenharmony_ci
9197db96d56Sopenharmony_ci      Set default values for missing arguments.
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci      For variable-positional arguments (``*args``) the default is an
9227db96d56Sopenharmony_ci      empty tuple.
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci      For variable-keyword arguments (``**kwargs``) the default is an
9257db96d56Sopenharmony_ci      empty dict.
9267db96d56Sopenharmony_ci
9277db96d56Sopenharmony_ci      ::
9287db96d56Sopenharmony_ci
9297db96d56Sopenharmony_ci        >>> def foo(a, b='ham', *args): pass
9307db96d56Sopenharmony_ci        >>> ba = inspect.signature(foo).bind('spam')
9317db96d56Sopenharmony_ci        >>> ba.apply_defaults()
9327db96d56Sopenharmony_ci        >>> ba.arguments
9337db96d56Sopenharmony_ci        {'a': 'spam', 'b': 'ham', 'args': ()}
9347db96d56Sopenharmony_ci
9357db96d56Sopenharmony_ci      .. versionadded:: 3.5
9367db96d56Sopenharmony_ci
9377db96d56Sopenharmony_ci   The :attr:`args` and :attr:`kwargs` properties can be used to invoke
9387db96d56Sopenharmony_ci   functions::
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ci      def test(a, *, b):
9417db96d56Sopenharmony_ci          ...
9427db96d56Sopenharmony_ci
9437db96d56Sopenharmony_ci      sig = signature(test)
9447db96d56Sopenharmony_ci      ba = sig.bind(10, b=20)
9457db96d56Sopenharmony_ci      test(*ba.args, **ba.kwargs)
9467db96d56Sopenharmony_ci
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_ci.. seealso::
9497db96d56Sopenharmony_ci
9507db96d56Sopenharmony_ci   :pep:`362` - Function Signature Object.
9517db96d56Sopenharmony_ci      The detailed specification, implementation details and examples.
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ci.. _inspect-classes-functions:
9557db96d56Sopenharmony_ci
9567db96d56Sopenharmony_ciClasses and functions
9577db96d56Sopenharmony_ci---------------------
9587db96d56Sopenharmony_ci
9597db96d56Sopenharmony_ci.. function:: getclasstree(classes, unique=False)
9607db96d56Sopenharmony_ci
9617db96d56Sopenharmony_ci   Arrange the given list of classes into a hierarchy of nested lists. Where a
9627db96d56Sopenharmony_ci   nested list appears, it contains classes derived from the class whose entry
9637db96d56Sopenharmony_ci   immediately precedes the list.  Each entry is a 2-tuple containing a class and a
9647db96d56Sopenharmony_ci   tuple of its base classes.  If the *unique* argument is true, exactly one entry
9657db96d56Sopenharmony_ci   appears in the returned structure for each class in the given list.  Otherwise,
9667db96d56Sopenharmony_ci   classes using multiple inheritance and their descendants will appear multiple
9677db96d56Sopenharmony_ci   times.
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_ci.. function:: getfullargspec(func)
9717db96d56Sopenharmony_ci
9727db96d56Sopenharmony_ci   Get the names and default values of a Python function's parameters.  A
9737db96d56Sopenharmony_ci   :term:`named tuple` is returned:
9747db96d56Sopenharmony_ci
9757db96d56Sopenharmony_ci   ``FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults,
9767db96d56Sopenharmony_ci   annotations)``
9777db96d56Sopenharmony_ci
9787db96d56Sopenharmony_ci   *args* is a list of the positional parameter names.
9797db96d56Sopenharmony_ci   *varargs* is the name of the ``*`` parameter or ``None`` if arbitrary
9807db96d56Sopenharmony_ci   positional arguments are not accepted.
9817db96d56Sopenharmony_ci   *varkw* is the name of the ``**`` parameter or ``None`` if arbitrary
9827db96d56Sopenharmony_ci   keyword arguments are not accepted.
9837db96d56Sopenharmony_ci   *defaults* is an *n*-tuple of default argument values corresponding to the
9847db96d56Sopenharmony_ci   last *n* positional parameters, or ``None`` if there are no such defaults
9857db96d56Sopenharmony_ci   defined.
9867db96d56Sopenharmony_ci   *kwonlyargs* is a list of keyword-only parameter names in declaration order.
9877db96d56Sopenharmony_ci   *kwonlydefaults* is a dictionary mapping parameter names from *kwonlyargs*
9887db96d56Sopenharmony_ci   to the default values used if no argument is supplied.
9897db96d56Sopenharmony_ci   *annotations* is a dictionary mapping parameter names to annotations.
9907db96d56Sopenharmony_ci   The special key ``"return"`` is used to report the function return value
9917db96d56Sopenharmony_ci   annotation (if any).
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ci   Note that :func:`signature` and
9947db96d56Sopenharmony_ci   :ref:`Signature Object <inspect-signature-object>` provide the recommended
9957db96d56Sopenharmony_ci   API for callable introspection, and support additional behaviours (like
9967db96d56Sopenharmony_ci   positional-only arguments) that are sometimes encountered in extension module
9977db96d56Sopenharmony_ci   APIs. This function is retained primarily for use in code that needs to
9987db96d56Sopenharmony_ci   maintain compatibility with the Python 2 ``inspect`` module API.
9997db96d56Sopenharmony_ci
10007db96d56Sopenharmony_ci   .. versionchanged:: 3.4
10017db96d56Sopenharmony_ci      This function is now based on :func:`signature`, but still ignores
10027db96d56Sopenharmony_ci      ``__wrapped__`` attributes and includes the already bound first
10037db96d56Sopenharmony_ci      parameter in the signature output for bound methods.
10047db96d56Sopenharmony_ci
10057db96d56Sopenharmony_ci   .. versionchanged:: 3.6
10067db96d56Sopenharmony_ci      This method was previously documented as deprecated in favour of
10077db96d56Sopenharmony_ci      :func:`signature` in Python 3.5, but that decision has been reversed
10087db96d56Sopenharmony_ci      in order to restore a clearly supported standard interface for
10097db96d56Sopenharmony_ci      single-source Python 2/3 code migrating away from the legacy
10107db96d56Sopenharmony_ci      :func:`getargspec` API.
10117db96d56Sopenharmony_ci
10127db96d56Sopenharmony_ci   .. versionchanged:: 3.7
10137db96d56Sopenharmony_ci      Python only explicitly guaranteed that it preserved the declaration
10147db96d56Sopenharmony_ci      order of keyword-only parameters as of version 3.7, although in practice
10157db96d56Sopenharmony_ci      this order had always been preserved in Python 3.
10167db96d56Sopenharmony_ci
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci.. function:: getargvalues(frame)
10197db96d56Sopenharmony_ci
10207db96d56Sopenharmony_ci   Get information about arguments passed into a particular frame.  A
10217db96d56Sopenharmony_ci   :term:`named tuple` ``ArgInfo(args, varargs, keywords, locals)`` is
10227db96d56Sopenharmony_ci   returned. *args* is a list of the argument names.  *varargs* and *keywords*
10237db96d56Sopenharmony_ci   are the names of the ``*`` and ``**`` arguments or ``None``.  *locals* is the
10247db96d56Sopenharmony_ci   locals dictionary of the given frame.
10257db96d56Sopenharmony_ci
10267db96d56Sopenharmony_ci   .. note::
10277db96d56Sopenharmony_ci      This function was inadvertently marked as deprecated in Python 3.5.
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ci
10307db96d56Sopenharmony_ci.. function:: formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci   Format a pretty argument spec from the four values returned by
10337db96d56Sopenharmony_ci   :func:`getargvalues`.  The format\* arguments are the corresponding optional
10347db96d56Sopenharmony_ci   formatting functions that are called to turn names and values into strings.
10357db96d56Sopenharmony_ci
10367db96d56Sopenharmony_ci   .. note::
10377db96d56Sopenharmony_ci      This function was inadvertently marked as deprecated in Python 3.5.
10387db96d56Sopenharmony_ci
10397db96d56Sopenharmony_ci
10407db96d56Sopenharmony_ci.. function:: getmro(cls)
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci   Return a tuple of class cls's base classes, including cls, in method resolution
10437db96d56Sopenharmony_ci   order.  No class appears more than once in this tuple. Note that the method
10447db96d56Sopenharmony_ci   resolution order depends on cls's type.  Unless a very peculiar user-defined
10457db96d56Sopenharmony_ci   metatype is in use, cls will be the first element of the tuple.
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci
10487db96d56Sopenharmony_ci.. function:: getcallargs(func, /, *args, **kwds)
10497db96d56Sopenharmony_ci
10507db96d56Sopenharmony_ci   Bind the *args* and *kwds* to the argument names of the Python function or
10517db96d56Sopenharmony_ci   method *func*, as if it was called with them. For bound methods, bind also the
10527db96d56Sopenharmony_ci   first argument (typically named ``self``) to the associated instance. A dict
10537db96d56Sopenharmony_ci   is returned, mapping the argument names (including the names of the ``*`` and
10547db96d56Sopenharmony_ci   ``**`` arguments, if any) to their values from *args* and *kwds*. In case of
10557db96d56Sopenharmony_ci   invoking *func* incorrectly, i.e. whenever ``func(*args, **kwds)`` would raise
10567db96d56Sopenharmony_ci   an exception because of incompatible signature, an exception of the same type
10577db96d56Sopenharmony_ci   and the same or similar message is raised. For example::
10587db96d56Sopenharmony_ci
10597db96d56Sopenharmony_ci    >>> from inspect import getcallargs
10607db96d56Sopenharmony_ci    >>> def f(a, b=1, *pos, **named):
10617db96d56Sopenharmony_ci    ...     pass
10627db96d56Sopenharmony_ci    >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)}
10637db96d56Sopenharmony_ci    True
10647db96d56Sopenharmony_ci    >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()}
10657db96d56Sopenharmony_ci    True
10667db96d56Sopenharmony_ci    >>> getcallargs(f)
10677db96d56Sopenharmony_ci    Traceback (most recent call last):
10687db96d56Sopenharmony_ci    ...
10697db96d56Sopenharmony_ci    TypeError: f() missing 1 required positional argument: 'a'
10707db96d56Sopenharmony_ci
10717db96d56Sopenharmony_ci   .. versionadded:: 3.2
10727db96d56Sopenharmony_ci
10737db96d56Sopenharmony_ci   .. deprecated:: 3.5
10747db96d56Sopenharmony_ci      Use :meth:`Signature.bind` and :meth:`Signature.bind_partial` instead.
10757db96d56Sopenharmony_ci
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_ci.. function:: getclosurevars(func)
10787db96d56Sopenharmony_ci
10797db96d56Sopenharmony_ci   Get the mapping of external name references in a Python function or
10807db96d56Sopenharmony_ci   method *func* to their current values. A
10817db96d56Sopenharmony_ci   :term:`named tuple` ``ClosureVars(nonlocals, globals, builtins, unbound)``
10827db96d56Sopenharmony_ci   is returned. *nonlocals* maps referenced names to lexical closure
10837db96d56Sopenharmony_ci   variables, *globals* to the function's module globals and *builtins* to
10847db96d56Sopenharmony_ci   the builtins visible from the function body. *unbound* is the set of names
10857db96d56Sopenharmony_ci   referenced in the function that could not be resolved at all given the
10867db96d56Sopenharmony_ci   current module globals and builtins.
10877db96d56Sopenharmony_ci
10887db96d56Sopenharmony_ci   :exc:`TypeError` is raised if *func* is not a Python function or method.
10897db96d56Sopenharmony_ci
10907db96d56Sopenharmony_ci   .. versionadded:: 3.3
10917db96d56Sopenharmony_ci
10927db96d56Sopenharmony_ci
10937db96d56Sopenharmony_ci.. function:: unwrap(func, *, stop=None)
10947db96d56Sopenharmony_ci
10957db96d56Sopenharmony_ci   Get the object wrapped by *func*. It follows the chain of :attr:`__wrapped__`
10967db96d56Sopenharmony_ci   attributes returning the last object in the chain.
10977db96d56Sopenharmony_ci
10987db96d56Sopenharmony_ci   *stop* is an optional callback accepting an object in the wrapper chain
10997db96d56Sopenharmony_ci   as its sole argument that allows the unwrapping to be terminated early if
11007db96d56Sopenharmony_ci   the callback returns a true value. If the callback never returns a true
11017db96d56Sopenharmony_ci   value, the last object in the chain is returned as usual. For example,
11027db96d56Sopenharmony_ci   :func:`signature` uses this to stop unwrapping if any object in the
11037db96d56Sopenharmony_ci   chain has a ``__signature__`` attribute defined.
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci   :exc:`ValueError` is raised if a cycle is encountered.
11067db96d56Sopenharmony_ci
11077db96d56Sopenharmony_ci   .. versionadded:: 3.4
11087db96d56Sopenharmony_ci
11097db96d56Sopenharmony_ci
11107db96d56Sopenharmony_ci.. function:: get_annotations(obj, *, globals=None, locals=None, eval_str=False)
11117db96d56Sopenharmony_ci
11127db96d56Sopenharmony_ci   Compute the annotations dict for an object.
11137db96d56Sopenharmony_ci
11147db96d56Sopenharmony_ci   ``obj`` may be a callable, class, or module.
11157db96d56Sopenharmony_ci   Passing in an object of any other type raises :exc:`TypeError`.
11167db96d56Sopenharmony_ci
11177db96d56Sopenharmony_ci   Returns a dict.  ``get_annotations()`` returns a new dict every time
11187db96d56Sopenharmony_ci   it's called; calling it twice on the same object will return two
11197db96d56Sopenharmony_ci   different but equivalent dicts.
11207db96d56Sopenharmony_ci
11217db96d56Sopenharmony_ci   This function handles several details for you:
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci   * If ``eval_str`` is true, values of type ``str`` will
11247db96d56Sopenharmony_ci     be un-stringized using :func:`eval()`.  This is intended
11257db96d56Sopenharmony_ci     for use with stringized annotations
11267db96d56Sopenharmony_ci     (``from __future__ import annotations``).
11277db96d56Sopenharmony_ci   * If ``obj`` doesn't have an annotations dict, returns an
11287db96d56Sopenharmony_ci     empty dict.  (Functions and methods always have an
11297db96d56Sopenharmony_ci     annotations dict; classes, modules, and other types of
11307db96d56Sopenharmony_ci     callables may not.)
11317db96d56Sopenharmony_ci   * Ignores inherited annotations on classes.  If a class
11327db96d56Sopenharmony_ci     doesn't have its own annotations dict, returns an empty dict.
11337db96d56Sopenharmony_ci   * All accesses to object members and dict values are done
11347db96d56Sopenharmony_ci     using ``getattr()`` and ``dict.get()`` for safety.
11357db96d56Sopenharmony_ci   * Always, always, always returns a freshly created dict.
11367db96d56Sopenharmony_ci
11377db96d56Sopenharmony_ci   ``eval_str`` controls whether or not values of type ``str`` are replaced
11387db96d56Sopenharmony_ci   with the result of calling :func:`eval()` on those values:
11397db96d56Sopenharmony_ci
11407db96d56Sopenharmony_ci   * If eval_str is true, :func:`eval()` is called on values of type ``str``.
11417db96d56Sopenharmony_ci     (Note that ``get_annotations`` doesn't catch exceptions; if :func:`eval()`
11427db96d56Sopenharmony_ci     raises an exception, it will unwind the stack past the ``get_annotations``
11437db96d56Sopenharmony_ci     call.)
11447db96d56Sopenharmony_ci   * If eval_str is false (the default), values of type ``str`` are unchanged.
11457db96d56Sopenharmony_ci
11467db96d56Sopenharmony_ci   ``globals`` and ``locals`` are passed in to :func:`eval()`; see the documentation
11477db96d56Sopenharmony_ci   for :func:`eval()` for more information.  If ``globals`` or ``locals``
11487db96d56Sopenharmony_ci   is ``None``, this function may replace that value with a context-specific
11497db96d56Sopenharmony_ci   default, contingent on ``type(obj)``:
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci   * If ``obj`` is a module, ``globals`` defaults to ``obj.__dict__``.
11527db96d56Sopenharmony_ci   * If ``obj`` is a class, ``globals`` defaults to
11537db96d56Sopenharmony_ci     ``sys.modules[obj.__module__].__dict__`` and ``locals`` defaults
11547db96d56Sopenharmony_ci     to the ``obj`` class namespace.
11557db96d56Sopenharmony_ci   * If ``obj`` is a callable, ``globals`` defaults to ``obj.__globals__``,
11567db96d56Sopenharmony_ci     although if ``obj`` is a wrapped function (using
11577db96d56Sopenharmony_ci     ``functools.update_wrapper()``) it is first unwrapped.
11587db96d56Sopenharmony_ci
11597db96d56Sopenharmony_ci   Calling ``get_annotations`` is best practice for accessing the
11607db96d56Sopenharmony_ci   annotations dict of any object.  See :ref:`annotations-howto` for
11617db96d56Sopenharmony_ci   more information on annotations best practices.
11627db96d56Sopenharmony_ci
11637db96d56Sopenharmony_ci   .. versionadded:: 3.10
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ci
11667db96d56Sopenharmony_ci.. _inspect-stack:
11677db96d56Sopenharmony_ci
11687db96d56Sopenharmony_ciThe interpreter stack
11697db96d56Sopenharmony_ci---------------------
11707db96d56Sopenharmony_ci
11717db96d56Sopenharmony_ciSome of the following functions return
11727db96d56Sopenharmony_ci:class:`FrameInfo` objects. For backwards compatibility these objects allow
11737db96d56Sopenharmony_cituple-like operations on all attributes except ``positions``. This behavior
11747db96d56Sopenharmony_ciis considered deprecated and may be removed in the future.
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci.. class:: FrameInfo
11777db96d56Sopenharmony_ci
11787db96d56Sopenharmony_ci   .. attribute:: frame
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_ci      The :ref:`frame object <frame-objects>` that the record corresponds to.
11817db96d56Sopenharmony_ci
11827db96d56Sopenharmony_ci   .. attribute:: filename
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci      The file name associated with the code being executed by the frame this record
11857db96d56Sopenharmony_ci      corresponds to.
11867db96d56Sopenharmony_ci
11877db96d56Sopenharmony_ci   .. attribute:: lineno
11887db96d56Sopenharmony_ci
11897db96d56Sopenharmony_ci      The line number of the current line associated with the code being
11907db96d56Sopenharmony_ci      executed by the frame this record corresponds to.
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci   .. attribute:: function
11937db96d56Sopenharmony_ci
11947db96d56Sopenharmony_ci      The function name that is being executed by the frame this record corresponds to.
11957db96d56Sopenharmony_ci
11967db96d56Sopenharmony_ci   .. attribute:: code_context
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_ci      A list of lines of context from the source code that's being executed by the frame
11997db96d56Sopenharmony_ci      this record corresponds to.
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_ci   .. attribute:: index
12027db96d56Sopenharmony_ci
12037db96d56Sopenharmony_ci      The index of the current line being executed in the :attr:`code_context` list.
12047db96d56Sopenharmony_ci
12057db96d56Sopenharmony_ci   .. attribute:: positions
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ci      A :class:`dis.Positions` object containing the start line number, end line
12087db96d56Sopenharmony_ci      number, start column offset, and end column offset associated with the
12097db96d56Sopenharmony_ci      instruction being executed by the frame this record corresponds to.
12107db96d56Sopenharmony_ci
12117db96d56Sopenharmony_ci   .. versionchanged:: 3.5
12127db96d56Sopenharmony_ci      Return a :term:`named tuple` instead of a :class:`tuple`.
12137db96d56Sopenharmony_ci
12147db96d56Sopenharmony_ci   .. versionchanged:: 3.11
12157db96d56Sopenharmony_ci      :class:`!FrameInfo` is now a class instance
12167db96d56Sopenharmony_ci      (that is backwards compatible with the previous :term:`named tuple`).
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_ci.. class:: Traceback
12207db96d56Sopenharmony_ci
12217db96d56Sopenharmony_ci   .. attribute:: filename
12227db96d56Sopenharmony_ci
12237db96d56Sopenharmony_ci      The file name associated with the code being executed by the frame this traceback
12247db96d56Sopenharmony_ci      corresponds to.
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ci   .. attribute:: lineno
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci      The line number of the current line associated with the code being
12297db96d56Sopenharmony_ci      executed by the frame this traceback corresponds to.
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_ci   .. attribute:: function
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ci      The function name that is being executed by the frame this traceback corresponds to.
12347db96d56Sopenharmony_ci
12357db96d56Sopenharmony_ci   .. attribute:: code_context
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci      A list of lines of context from the source code that's being executed by the frame
12387db96d56Sopenharmony_ci      this traceback corresponds to.
12397db96d56Sopenharmony_ci
12407db96d56Sopenharmony_ci   .. attribute:: index
12417db96d56Sopenharmony_ci
12427db96d56Sopenharmony_ci      The index of the current line being executed in the :attr:`code_context` list.
12437db96d56Sopenharmony_ci
12447db96d56Sopenharmony_ci   .. attribute:: positions
12457db96d56Sopenharmony_ci
12467db96d56Sopenharmony_ci      A :class:`dis.Positions` object containing the start line number, end
12477db96d56Sopenharmony_ci      line number, start column offset, and end column offset associated with
12487db96d56Sopenharmony_ci      the instruction being executed by the frame this traceback corresponds
12497db96d56Sopenharmony_ci      to.
12507db96d56Sopenharmony_ci
12517db96d56Sopenharmony_ci   .. versionchanged:: 3.11
12527db96d56Sopenharmony_ci      :class:`!Traceback` is now a class instance
12537db96d56Sopenharmony_ci      (that is backwards compatible with the previous :term:`named tuple`).
12547db96d56Sopenharmony_ci
12557db96d56Sopenharmony_ci
12567db96d56Sopenharmony_ci.. note::
12577db96d56Sopenharmony_ci
12587db96d56Sopenharmony_ci   Keeping references to frame objects, as found in the first element of the frame
12597db96d56Sopenharmony_ci   records these functions return, can cause your program to create reference
12607db96d56Sopenharmony_ci   cycles.  Once a reference cycle has been created, the lifespan of all objects
12617db96d56Sopenharmony_ci   which can be accessed from the objects which form the cycle can become much
12627db96d56Sopenharmony_ci   longer even if Python's optional cycle detector is enabled.  If such cycles must
12637db96d56Sopenharmony_ci   be created, it is important to ensure they are explicitly broken to avoid the
12647db96d56Sopenharmony_ci   delayed destruction of objects and increased memory consumption which occurs.
12657db96d56Sopenharmony_ci
12667db96d56Sopenharmony_ci   Though the cycle detector will catch these, destruction of the frames (and local
12677db96d56Sopenharmony_ci   variables) can be made deterministic by removing the cycle in a
12687db96d56Sopenharmony_ci   :keyword:`finally` clause.  This is also important if the cycle detector was
12697db96d56Sopenharmony_ci   disabled when Python was compiled or using :func:`gc.disable`.  For example::
12707db96d56Sopenharmony_ci
12717db96d56Sopenharmony_ci      def handle_stackframe_without_leak():
12727db96d56Sopenharmony_ci          frame = inspect.currentframe()
12737db96d56Sopenharmony_ci          try:
12747db96d56Sopenharmony_ci              # do something with the frame
12757db96d56Sopenharmony_ci          finally:
12767db96d56Sopenharmony_ci              del frame
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ci   If you want to keep the frame around (for example to print a traceback
12797db96d56Sopenharmony_ci   later), you can also break reference cycles by using the
12807db96d56Sopenharmony_ci   :meth:`frame.clear` method.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ciThe optional *context* argument supported by most of these functions specifies
12837db96d56Sopenharmony_cithe number of lines of context to return, which are centered around the current
12847db96d56Sopenharmony_ciline.
12857db96d56Sopenharmony_ci
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ci.. function:: getframeinfo(frame, context=1)
12887db96d56Sopenharmony_ci
12897db96d56Sopenharmony_ci   Get information about a frame or traceback object.  A :class:`Traceback` object
12907db96d56Sopenharmony_ci   is returned.
12917db96d56Sopenharmony_ci
12927db96d56Sopenharmony_ci   .. versionchanged:: 3.11
12937db96d56Sopenharmony_ci      A :class:`Traceback` object is returned instead of a named tuple.
12947db96d56Sopenharmony_ci
12957db96d56Sopenharmony_ci.. function:: getouterframes(frame, context=1)
12967db96d56Sopenharmony_ci
12977db96d56Sopenharmony_ci   Get a list of :class:`FrameInfo` objects for a frame and all outer frames.
12987db96d56Sopenharmony_ci   These frames represent the calls that lead to the creation of *frame*. The
12997db96d56Sopenharmony_ci   first entry in the returned list represents *frame*; the last entry
13007db96d56Sopenharmony_ci   represents the outermost call on *frame*'s stack.
13017db96d56Sopenharmony_ci
13027db96d56Sopenharmony_ci   .. versionchanged:: 3.5
13037db96d56Sopenharmony_ci      A list of :term:`named tuples <named tuple>`
13047db96d56Sopenharmony_ci      ``FrameInfo(frame, filename, lineno, function, code_context, index)``
13057db96d56Sopenharmony_ci      is returned.
13067db96d56Sopenharmony_ci
13077db96d56Sopenharmony_ci   .. versionchanged:: 3.11
13087db96d56Sopenharmony_ci      A list of :class:`FrameInfo` objects is returned.
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci.. function:: getinnerframes(traceback, context=1)
13117db96d56Sopenharmony_ci
13127db96d56Sopenharmony_ci   Get a list of :class:`FrameInfo` objects for a traceback's frame and all
13137db96d56Sopenharmony_ci   inner frames.  These frames represent calls made as a consequence of *frame*.
13147db96d56Sopenharmony_ci   The first entry in the list represents *traceback*; the last entry represents
13157db96d56Sopenharmony_ci   where the exception was raised.
13167db96d56Sopenharmony_ci
13177db96d56Sopenharmony_ci   .. versionchanged:: 3.5
13187db96d56Sopenharmony_ci      A list of :term:`named tuples <named tuple>`
13197db96d56Sopenharmony_ci      ``FrameInfo(frame, filename, lineno, function, code_context, index)``
13207db96d56Sopenharmony_ci      is returned.
13217db96d56Sopenharmony_ci
13227db96d56Sopenharmony_ci   .. versionchanged:: 3.11
13237db96d56Sopenharmony_ci      A list of :class:`FrameInfo` objects is returned.
13247db96d56Sopenharmony_ci
13257db96d56Sopenharmony_ci.. function:: currentframe()
13267db96d56Sopenharmony_ci
13277db96d56Sopenharmony_ci   Return the frame object for the caller's stack frame.
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_ci   .. impl-detail::
13307db96d56Sopenharmony_ci
13317db96d56Sopenharmony_ci      This function relies on Python stack frame support in the interpreter,
13327db96d56Sopenharmony_ci      which isn't guaranteed to exist in all implementations of Python.  If
13337db96d56Sopenharmony_ci      running in an implementation without Python stack frame support this
13347db96d56Sopenharmony_ci      function returns ``None``.
13357db96d56Sopenharmony_ci
13367db96d56Sopenharmony_ci
13377db96d56Sopenharmony_ci.. function:: stack(context=1)
13387db96d56Sopenharmony_ci
13397db96d56Sopenharmony_ci   Return a list of :class:`FrameInfo` objects for the caller's stack.  The
13407db96d56Sopenharmony_ci   first entry in the returned list represents the caller; the last entry
13417db96d56Sopenharmony_ci   represents the outermost call on the stack.
13427db96d56Sopenharmony_ci
13437db96d56Sopenharmony_ci   .. versionchanged:: 3.5
13447db96d56Sopenharmony_ci      A list of :term:`named tuples <named tuple>`
13457db96d56Sopenharmony_ci      ``FrameInfo(frame, filename, lineno, function, code_context, index)``
13467db96d56Sopenharmony_ci      is returned.
13477db96d56Sopenharmony_ci
13487db96d56Sopenharmony_ci   .. versionchanged:: 3.11
13497db96d56Sopenharmony_ci      A list of :class:`FrameInfo` objects is returned.
13507db96d56Sopenharmony_ci
13517db96d56Sopenharmony_ci.. function:: trace(context=1)
13527db96d56Sopenharmony_ci
13537db96d56Sopenharmony_ci   Return a list of :class:`FrameInfo` objects for the stack between the current
13547db96d56Sopenharmony_ci   frame and the frame in which an exception currently being handled was raised
13557db96d56Sopenharmony_ci   in.  The first entry in the list represents the caller; the last entry
13567db96d56Sopenharmony_ci   represents where the exception was raised.
13577db96d56Sopenharmony_ci
13587db96d56Sopenharmony_ci   .. versionchanged:: 3.5
13597db96d56Sopenharmony_ci      A list of :term:`named tuples <named tuple>`
13607db96d56Sopenharmony_ci      ``FrameInfo(frame, filename, lineno, function, code_context, index)``
13617db96d56Sopenharmony_ci      is returned.
13627db96d56Sopenharmony_ci
13637db96d56Sopenharmony_ci   .. versionchanged:: 3.11
13647db96d56Sopenharmony_ci      A list of :class:`FrameInfo` objects is returned.
13657db96d56Sopenharmony_ci
13667db96d56Sopenharmony_ciFetching attributes statically
13677db96d56Sopenharmony_ci------------------------------
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ciBoth :func:`getattr` and :func:`hasattr` can trigger code execution when
13707db96d56Sopenharmony_cifetching or checking for the existence of attributes. Descriptors, like
13717db96d56Sopenharmony_ciproperties, will be invoked and :meth:`__getattr__` and :meth:`__getattribute__`
13727db96d56Sopenharmony_cimay be called.
13737db96d56Sopenharmony_ci
13747db96d56Sopenharmony_ciFor cases where you want passive introspection, like documentation tools, this
13757db96d56Sopenharmony_cican be inconvenient. :func:`getattr_static` has the same signature as :func:`getattr`
13767db96d56Sopenharmony_cibut avoids executing code when it fetches attributes.
13777db96d56Sopenharmony_ci
13787db96d56Sopenharmony_ci.. function:: getattr_static(obj, attr, default=None)
13797db96d56Sopenharmony_ci
13807db96d56Sopenharmony_ci   Retrieve attributes without triggering dynamic lookup via the
13817db96d56Sopenharmony_ci   descriptor protocol, :meth:`__getattr__` or :meth:`__getattribute__`.
13827db96d56Sopenharmony_ci
13837db96d56Sopenharmony_ci   Note: this function may not be able to retrieve all attributes
13847db96d56Sopenharmony_ci   that getattr can fetch (like dynamically created attributes)
13857db96d56Sopenharmony_ci   and may find attributes that getattr can't (like descriptors
13867db96d56Sopenharmony_ci   that raise AttributeError). It can also return descriptors objects
13877db96d56Sopenharmony_ci   instead of instance members.
13887db96d56Sopenharmony_ci
13897db96d56Sopenharmony_ci   If the instance :attr:`~object.__dict__` is shadowed by another member (for
13907db96d56Sopenharmony_ci   example a property) then this function will be unable to find instance
13917db96d56Sopenharmony_ci   members.
13927db96d56Sopenharmony_ci
13937db96d56Sopenharmony_ci   .. versionadded:: 3.2
13947db96d56Sopenharmony_ci
13957db96d56Sopenharmony_ci:func:`getattr_static` does not resolve descriptors, for example slot descriptors or
13967db96d56Sopenharmony_cigetset descriptors on objects implemented in C. The descriptor object
13977db96d56Sopenharmony_ciis returned instead of the underlying attribute.
13987db96d56Sopenharmony_ci
13997db96d56Sopenharmony_ciYou can handle these with code like the following. Note that
14007db96d56Sopenharmony_cifor arbitrary getset descriptors invoking these may trigger
14017db96d56Sopenharmony_cicode execution::
14027db96d56Sopenharmony_ci
14037db96d56Sopenharmony_ci   # example code for resolving the builtin descriptor types
14047db96d56Sopenharmony_ci   class _foo:
14057db96d56Sopenharmony_ci       __slots__ = ['foo']
14067db96d56Sopenharmony_ci
14077db96d56Sopenharmony_ci   slot_descriptor = type(_foo.foo)
14087db96d56Sopenharmony_ci   getset_descriptor = type(type(open(__file__)).name)
14097db96d56Sopenharmony_ci   wrapper_descriptor = type(str.__dict__['__add__'])
14107db96d56Sopenharmony_ci   descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)
14117db96d56Sopenharmony_ci
14127db96d56Sopenharmony_ci   result = getattr_static(some_object, 'foo')
14137db96d56Sopenharmony_ci   if type(result) in descriptor_types:
14147db96d56Sopenharmony_ci       try:
14157db96d56Sopenharmony_ci           result = result.__get__()
14167db96d56Sopenharmony_ci       except AttributeError:
14177db96d56Sopenharmony_ci           # descriptors can raise AttributeError to
14187db96d56Sopenharmony_ci           # indicate there is no underlying value
14197db96d56Sopenharmony_ci           # in which case the descriptor itself will
14207db96d56Sopenharmony_ci           # have to do
14217db96d56Sopenharmony_ci           pass
14227db96d56Sopenharmony_ci
14237db96d56Sopenharmony_ci
14247db96d56Sopenharmony_ciCurrent State of Generators and Coroutines
14257db96d56Sopenharmony_ci------------------------------------------
14267db96d56Sopenharmony_ci
14277db96d56Sopenharmony_ciWhen implementing coroutine schedulers and for other advanced uses of
14287db96d56Sopenharmony_cigenerators, it is useful to determine whether a generator is currently
14297db96d56Sopenharmony_ciexecuting, is waiting to start or resume or execution, or has already
14307db96d56Sopenharmony_citerminated. :func:`getgeneratorstate` allows the current state of a
14317db96d56Sopenharmony_cigenerator to be determined easily.
14327db96d56Sopenharmony_ci
14337db96d56Sopenharmony_ci.. function:: getgeneratorstate(generator)
14347db96d56Sopenharmony_ci
14357db96d56Sopenharmony_ci   Get current state of a generator-iterator.
14367db96d56Sopenharmony_ci
14377db96d56Sopenharmony_ci   Possible states are:
14387db96d56Sopenharmony_ci    * GEN_CREATED: Waiting to start execution.
14397db96d56Sopenharmony_ci    * GEN_RUNNING: Currently being executed by the interpreter.
14407db96d56Sopenharmony_ci    * GEN_SUSPENDED: Currently suspended at a yield expression.
14417db96d56Sopenharmony_ci    * GEN_CLOSED: Execution has completed.
14427db96d56Sopenharmony_ci
14437db96d56Sopenharmony_ci   .. versionadded:: 3.2
14447db96d56Sopenharmony_ci
14457db96d56Sopenharmony_ci.. function:: getcoroutinestate(coroutine)
14467db96d56Sopenharmony_ci
14477db96d56Sopenharmony_ci   Get current state of a coroutine object.  The function is intended to be
14487db96d56Sopenharmony_ci   used with coroutine objects created by :keyword:`async def` functions, but
14497db96d56Sopenharmony_ci   will accept any coroutine-like object that has ``cr_running`` and
14507db96d56Sopenharmony_ci   ``cr_frame`` attributes.
14517db96d56Sopenharmony_ci
14527db96d56Sopenharmony_ci   Possible states are:
14537db96d56Sopenharmony_ci    * CORO_CREATED: Waiting to start execution.
14547db96d56Sopenharmony_ci    * CORO_RUNNING: Currently being executed by the interpreter.
14557db96d56Sopenharmony_ci    * CORO_SUSPENDED: Currently suspended at an await expression.
14567db96d56Sopenharmony_ci    * CORO_CLOSED: Execution has completed.
14577db96d56Sopenharmony_ci
14587db96d56Sopenharmony_ci   .. versionadded:: 3.5
14597db96d56Sopenharmony_ci
14607db96d56Sopenharmony_ciThe current internal state of the generator can also be queried. This is
14617db96d56Sopenharmony_cimostly useful for testing purposes, to ensure that internal state is being
14627db96d56Sopenharmony_ciupdated as expected:
14637db96d56Sopenharmony_ci
14647db96d56Sopenharmony_ci.. function:: getgeneratorlocals(generator)
14657db96d56Sopenharmony_ci
14667db96d56Sopenharmony_ci   Get the mapping of live local variables in *generator* to their current
14677db96d56Sopenharmony_ci   values.  A dictionary is returned that maps from variable names to values.
14687db96d56Sopenharmony_ci   This is the equivalent of calling :func:`locals` in the body of the
14697db96d56Sopenharmony_ci   generator, and all the same caveats apply.
14707db96d56Sopenharmony_ci
14717db96d56Sopenharmony_ci   If *generator* is a :term:`generator` with no currently associated frame,
14727db96d56Sopenharmony_ci   then an empty dictionary is returned.  :exc:`TypeError` is raised if
14737db96d56Sopenharmony_ci   *generator* is not a Python generator object.
14747db96d56Sopenharmony_ci
14757db96d56Sopenharmony_ci   .. impl-detail::
14767db96d56Sopenharmony_ci
14777db96d56Sopenharmony_ci      This function relies on the generator exposing a Python stack frame
14787db96d56Sopenharmony_ci      for introspection, which isn't guaranteed to be the case in all
14797db96d56Sopenharmony_ci      implementations of Python. In such cases, this function will always
14807db96d56Sopenharmony_ci      return an empty dictionary.
14817db96d56Sopenharmony_ci
14827db96d56Sopenharmony_ci   .. versionadded:: 3.3
14837db96d56Sopenharmony_ci
14847db96d56Sopenharmony_ci.. function:: getcoroutinelocals(coroutine)
14857db96d56Sopenharmony_ci
14867db96d56Sopenharmony_ci   This function is analogous to :func:`~inspect.getgeneratorlocals`, but
14877db96d56Sopenharmony_ci   works for coroutine objects created by :keyword:`async def` functions.
14887db96d56Sopenharmony_ci
14897db96d56Sopenharmony_ci   .. versionadded:: 3.5
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci
14927db96d56Sopenharmony_ci.. _inspect-module-co-flags:
14937db96d56Sopenharmony_ci
14947db96d56Sopenharmony_ciCode Objects Bit Flags
14957db96d56Sopenharmony_ci----------------------
14967db96d56Sopenharmony_ci
14977db96d56Sopenharmony_ciPython code objects have a ``co_flags`` attribute, which is a bitmap of
14987db96d56Sopenharmony_cithe following flags:
14997db96d56Sopenharmony_ci
15007db96d56Sopenharmony_ci.. data:: CO_OPTIMIZED
15017db96d56Sopenharmony_ci
15027db96d56Sopenharmony_ci   The code object is optimized, using fast locals.
15037db96d56Sopenharmony_ci
15047db96d56Sopenharmony_ci.. data:: CO_NEWLOCALS
15057db96d56Sopenharmony_ci
15067db96d56Sopenharmony_ci   If set, a new dict will be created for the frame's ``f_locals`` when
15077db96d56Sopenharmony_ci   the code object is executed.
15087db96d56Sopenharmony_ci
15097db96d56Sopenharmony_ci.. data:: CO_VARARGS
15107db96d56Sopenharmony_ci
15117db96d56Sopenharmony_ci   The code object has a variable positional parameter (``*args``-like).
15127db96d56Sopenharmony_ci
15137db96d56Sopenharmony_ci.. data:: CO_VARKEYWORDS
15147db96d56Sopenharmony_ci
15157db96d56Sopenharmony_ci   The code object has a variable keyword parameter (``**kwargs``-like).
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci.. data:: CO_NESTED
15187db96d56Sopenharmony_ci
15197db96d56Sopenharmony_ci   The flag is set when the code object is a nested function.
15207db96d56Sopenharmony_ci
15217db96d56Sopenharmony_ci.. data:: CO_GENERATOR
15227db96d56Sopenharmony_ci
15237db96d56Sopenharmony_ci   The flag is set when the code object is a generator function, i.e.
15247db96d56Sopenharmony_ci   a generator object is returned when the code object is executed.
15257db96d56Sopenharmony_ci
15267db96d56Sopenharmony_ci.. data:: CO_COROUTINE
15277db96d56Sopenharmony_ci
15287db96d56Sopenharmony_ci   The flag is set when the code object is a coroutine function.
15297db96d56Sopenharmony_ci   When the code object is executed it returns a coroutine object.
15307db96d56Sopenharmony_ci   See :pep:`492` for more details.
15317db96d56Sopenharmony_ci
15327db96d56Sopenharmony_ci   .. versionadded:: 3.5
15337db96d56Sopenharmony_ci
15347db96d56Sopenharmony_ci.. data:: CO_ITERABLE_COROUTINE
15357db96d56Sopenharmony_ci
15367db96d56Sopenharmony_ci   The flag is used to transform generators into generator-based
15377db96d56Sopenharmony_ci   coroutines.  Generator objects with this flag can be used in
15387db96d56Sopenharmony_ci   ``await`` expression, and can ``yield from`` coroutine objects.
15397db96d56Sopenharmony_ci   See :pep:`492` for more details.
15407db96d56Sopenharmony_ci
15417db96d56Sopenharmony_ci   .. versionadded:: 3.5
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci.. data:: CO_ASYNC_GENERATOR
15447db96d56Sopenharmony_ci
15457db96d56Sopenharmony_ci   The flag is set when the code object is an asynchronous generator
15467db96d56Sopenharmony_ci   function.  When the code object is executed it returns an
15477db96d56Sopenharmony_ci   asynchronous generator object.  See :pep:`525` for more details.
15487db96d56Sopenharmony_ci
15497db96d56Sopenharmony_ci   .. versionadded:: 3.6
15507db96d56Sopenharmony_ci
15517db96d56Sopenharmony_ci.. note::
15527db96d56Sopenharmony_ci   The flags are specific to CPython, and may not be defined in other
15537db96d56Sopenharmony_ci   Python implementations.  Furthermore, the flags are an implementation
15547db96d56Sopenharmony_ci   detail, and can be removed or deprecated in future Python releases.
15557db96d56Sopenharmony_ci   It's recommended to use public APIs from the :mod:`inspect` module
15567db96d56Sopenharmony_ci   for any introspection needs.
15577db96d56Sopenharmony_ci
15587db96d56Sopenharmony_ci
15597db96d56Sopenharmony_ci.. _inspect-module-cli:
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ciCommand Line Interface
15627db96d56Sopenharmony_ci----------------------
15637db96d56Sopenharmony_ci
15647db96d56Sopenharmony_ciThe :mod:`inspect` module also provides a basic introspection capability
15657db96d56Sopenharmony_cifrom the command line.
15667db96d56Sopenharmony_ci
15677db96d56Sopenharmony_ci.. program:: inspect
15687db96d56Sopenharmony_ci
15697db96d56Sopenharmony_ciBy default, accepts the name of a module and prints the source of that
15707db96d56Sopenharmony_cimodule. A class or function within the module can be printed instead by
15717db96d56Sopenharmony_ciappended a colon and the qualified name of the target object.
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci.. cmdoption:: --details
15747db96d56Sopenharmony_ci
15757db96d56Sopenharmony_ci   Print information about the specified object rather than the source code
1576